feat: initial commit - EvoTraders project
量化交易多智能体系统,包含: - 分析师、投资组合经理、风险经理等智能体 - 股票分析、投资组合管理、风险控制工具 - React 前端界面 - FastAPI 后端服务 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
85
frontend/src/utils/formatters.js
Normal file
85
frontend/src/utils/formatters.js
Normal file
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* Formatting utility functions
|
||||
*/
|
||||
|
||||
/**
|
||||
* Format time from timestamp
|
||||
*/
|
||||
export function formatTime(ts) {
|
||||
try {
|
||||
const d = new Date(ts);
|
||||
return d.toLocaleString([], {
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
hour: "2-digit",
|
||||
minute: "2-digit"
|
||||
});
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Format date and time from timestamp
|
||||
*/
|
||||
export function formatDateTime(ts) {
|
||||
try {
|
||||
const d = new Date(ts);
|
||||
const date = d.toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
||||
const time = d.toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit", hour12: false });
|
||||
return `${date} ${time}`;
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Format number with commas (no decimals)
|
||||
*/
|
||||
export function formatNumber(num) {
|
||||
if (!isFinite(num)) {
|
||||
return "-";
|
||||
}
|
||||
return Math.abs(num).toLocaleString(undefined, { maximumFractionDigits: 0 });
|
||||
}
|
||||
|
||||
/**
|
||||
* Format full number with commas for Y-axis
|
||||
*/
|
||||
export function formatFullNumber(num) {
|
||||
if (!isFinite(num)) {
|
||||
return "-";
|
||||
}
|
||||
return num.toLocaleString(undefined, { maximumFractionDigits: 0 });
|
||||
}
|
||||
|
||||
/**
|
||||
* Format ticker price with appropriate decimal places
|
||||
*/
|
||||
export function formatTickerPrice(price) {
|
||||
if (!isFinite(price)) {
|
||||
return "-";
|
||||
}
|
||||
if (price >= 1000) {
|
||||
return price.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
||||
} else if (price >= 1) {
|
||||
return price.toFixed(2);
|
||||
} else {
|
||||
return price.toFixed(4);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate duration between two timestamps
|
||||
*/
|
||||
export function calculateDuration(start, end) {
|
||||
const diff = end - start;
|
||||
const minutes = Math.floor(diff / 60000);
|
||||
if (minutes < 60) {
|
||||
return `${minutes}m`;
|
||||
}
|
||||
const hours = Math.floor(minutes / 60);
|
||||
const mins = minutes % 60;
|
||||
return `${hours}h ${mins}m`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user