我需要用微秒来解析ISO 8601
中的时间戳。我不想失去精度。我需要进行解析,以便能够向查询中添加过滤条件。
支持微秒的数据库会创建这些时间戳,因此我不必担心在精度不够的环境中创建这些时间戳。但是数据库可以更改,因此我想拥有一个通用解析器,可以处理带或不带微秒时间戳的情况。
如果我使用Date
,则会失去微秒的精度。
答案 0 :(得分:0)
我创建了自己的类PrecisionDate
,该类存储的数字与Date一样以毫秒为单位,而小数部分则以微秒为单位。它使用new Date()
将时间戳解析为毫秒精度。然后,我使用正则表达式和捕获组来获取微秒。
const ISO8601_REGEX = /^(\d{4})-(0\d|1[0-2])-([0-2]\d|3[0-1])T([01]\d|2[0-4]):([0-5]\d):([0-5]\d)[.,](\d{3})?(\d{3})?(\d+)?\+(\d\d):(\d\d)/;
public static parse(timestamp: string): number {
// Get the full time except for the microseconds
let time = Date.parse(timestamp);
const captureGroups = ISO8601_REGEX.exec(timestamp);
const microSeconds = captureGroups[ISO8601_REGEX_MICRO];
if (microSeconds) {
time += parseInt(microSeconds, 10) / 1000;
}
return time;
}