Files
evotraders/frontend/src/utils/formatters.js
cillin 12de93aa30 feat: initial commit - EvoTraders project
量化交易多智能体系统,包含:
- 分析师、投资组合经理、风险经理等智能体
- 股票分析、投资组合管理、风险控制工具
- React 前端界面
- FastAPI 后端服务

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-13 04:34:06 +08:00

86 lines
1.8 KiB
JavaScript

/**
* 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`;
}