解析打字稿中的ISO 8601微秒

时间:2018-10-02 13:43:51

标签: typescript parsing time

我需要用微秒来解析ISO 8601中的时间戳。我不想失去精度。我需要进行解析,以便能够向查询中添加过滤条件。

支持微秒的数据库会创建这些时间戳,因此我不必担心在精度不够的环境中创建这些时间戳。但是数据库可以更改,因此我想拥有一个通用解析器,可以处理带或不带微秒时间戳的情况。 如果我使用Date,则会失去微秒的精度。

1 个答案:

答案 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;
}