Files
ToolBox/src/utils/timestamp.js
T
renjue ee2a2e6bb2
CI / docker (push) Failing after 2m23s
初始化 ToolBox 开发者工具箱。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 15:29:36 +08:00

75 lines
2.6 KiB
JavaScript

export function parseTimestampInput(value, type) {
const timestampStr = value.trim()
if (!timestampStr) return { error: 'empty' }
if (type === 'nanoseconds') {
try {
const timestampNs = BigInt(timestampStr)
const timestampMs = Number(timestampNs / BigInt(1000000))
const nanoseconds = Number(timestampNs % BigInt(1000000))
return { timestampMs, nanoseconds }
} catch {
return { error: 'invalid_nanoseconds' }
}
}
const timestamp = parseInt(timestampStr, 10)
if (isNaN(timestamp)) return { error: 'invalid_number' }
if (type === 'seconds') {
const timestampMs = timestamp.toString().length <= 10 ? timestamp * 1000 : timestamp
return { timestampMs, nanoseconds: 0 }
}
return { timestampMs: timestamp, nanoseconds: 0 }
}
export function formatTimestampMs(timestampMs, type, nanoseconds = 0) {
const date = new Date(timestampMs)
if (isNaN(date.getTime())) return { error: 'invalid_date' }
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
const milliseconds = String(date.getMilliseconds()).padStart(3, '0')
if (type === 'seconds') {
return { value: `${year}-${month}-${day} ${hours}:${minutes}:${seconds}` }
}
if (type === 'milliseconds') {
return { value: `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}` }
}
const nanosecondsStr = String(nanoseconds).padStart(6, '0')
return { value: `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}${nanosecondsStr}` }
}
export function parseDateString(dateStr) {
const trimmed = dateStr.trim()
if (!trimmed) return { error: 'empty' }
let date = null
if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(trimmed)) {
date = new Date(trimmed.replace(' ', 'T'))
} else if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+$/.test(trimmed)) {
date = new Date(trimmed.replace(' ', 'T'))
} else if (/^\d{4}\/\d{2}\/\d{2}/.test(trimmed)) {
date = new Date(trimmed)
} else {
date = new Date(trimmed)
}
if (!date || isNaN(date.getTime())) return { error: 'invalid_date' }
return { date }
}
export function dateToTimestamp(date, type) {
const ms = date.getTime()
if (type === 'seconds') return { value: String(Math.floor(ms / 1000)) }
if (type === 'milliseconds') return { value: String(ms) }
return { value: String(BigInt(ms) * BigInt(1000000)) }
}