Разбор UT C дат дает разное время - PullRequest
0 голосов
/ 13 января 2020

Я работаю над анализатором даты

const parseDate = (data: any): Date => {
    const isDate = (d: Date) => !isNaN(d.getDate());
    if (
      Object.prototype.toString.call(data) === '[object Date]' &&
      isDate(data)
    )
      return data
    else if (typeof data === 'string') {
      const date = new Date(data);
      if (isDate(date)) return date;
      else return `Not a date`
    } else return `Not a date`
}

В этой упрощенной версии он проверяет дату и возвращает ее или возвращает строку ошибки.

Тем не менее, он не может правильно проанализировать в UT C:

const oddDate = new Date("1970-01-01T00:00:00.001Z").toUTCString()
const result = parseDate(oddDate)
expect(oddDate).toEqual(result) 

Jest выдает ошибку:

    Expected: 1970-01-01T00:00:00.001Z
    Received: 1970-01-01T00:00:00.000Z

Кажется, что

new Date("1970-01-01T00:00:00.001Z") !== new Date(new Date("1970-01-01T00:00:00.001Z").toUTCString())

Как мне проанализировать UT C раз тогда правильно?

1 Ответ

1 голос
/ 14 января 2020

Вы теряете точность, когда вызываете функцию .toUTCString() для oddDate.

Обратите внимание на пропущенные миллисекунды на oddDateStr, пока они все еще присутствуют на oddDateIso ниже:

enter image description here

Обновление toISOString() не теряет точность:

enter image description here

toUTCString теряет точность в соответствии с используемым форматом строки (а именно, Www, dd Mmm yyyy hh:mm:ss GMT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...