Я создал свой собственный класс 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;
}