Почему не новая дата (мс) == (новая дата ()). SetMilliseconds (мс) - PullRequest
1 голос
/ 09 мая 2019

Я хотел бы преобразовать отметку времени в дату:

  status_transitions:
   { finalized_at: 1557419382,
     marked_uncollectible_at: null,
     paid_at: 1557419384,
     voided_at: null },    

В частности, paid_at: 1557419384. Но когда я пытаюсь new Date(1557419384), я не получаю ожидаемый результат. Если я использую Date.setMilliseconds (), я делаю.

Что особенно странно, так это вывод Date.setMilliseconds()

const ms = 1557419384;

const fromConstructor = new Date(ms);
const fromFn = new Date();
const strangeOutput = fromFn.setMilliseconds(ms);

console.log(`Milliseconds: ${ms}`);

console.log(`Output from setMilliseconds: ${strangeOutput}`);

console.log(`Date from new Date(ms): ${fromConstructor}`);

console.log(`Date using setMilliseconds(ms): ${fromFn}`);

Вывод кода выше:

Milliseconds: 1557419384
Output from setMilliseconds: 1558978824384
Date from new Date(ms): Sun Jan 18 1970 18:36:59 GMT-0600 (Central Standard Time)
Date using setMilliseconds(ms): Mon May 27 2019 12:40:24 GMT-0500 (Central Daylight Time)

Почему создание новой даты из числа не дает того же результата, что и setMilliseconds ()? Кроме того, почему выходные данные из setMilliseconds() отличаются от фактических миллисекунд, переданных в?

Я прочитал документы , и они, кажется, подразумевают, что не должно быть никакой разницы между этими двумя методами.

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Рассмотрим пример, показанный в setMilliseconds() части документации здесь .

var theBigDay = new Date();
theBigDay.setMilliseconds(100);

Запуск этого прямо сейчас, это дает мне значение 1557421875100. Обратите внимание, что только последние три цифры равны 100. Таким образом, он не устанавливает для всего объекта даты значение 100, а только устанавливает часть значения в миллисекундах. Остальное приходит от new Date(), который является текущей временной меткой на основе UTC.

Что касается того, почему вы не получите ожидаемый результат от new Date(1557419384), то эта временная метка будет выглядеть в секундах , а не в миллисекундах. Умножьте значение на 1000, и это даст более разумное значение. ( метки времени Unix обычно выражаются в целых секундах, что, как представляется, имеет место здесь.)

1 голос
/ 09 мая 2019

Почему выходные данные из setMilliseconds() отличаются от фактических миллисекунд, переданных в?

Проверьте документы более внимательно. setMilliSeconds имеет параметр "": Число от 0 до 999, представляющее миллисекунды."и его описание гласит" Если вы укажете число вне ожидаемого диапазона, информация о дате в объекте Date будет соответствующим образом обновлена. Например, если указать 1005, число секунд увеличивается на 1, а 5 используется для миллисекунд.".

Итак, new Date() создает дату с текущим временем, а затем вы добавляете к ней свое значение в миллисекундах.

Почему создание новой даты из числа не дает тот же результат, что и setMilliseconds()? Я прочитал документы, и они, кажется, подразумевают, что не должно быть никакой разницы между этими двумя методами.

То, что вы искали, это setTime. new Date().setTime(millseconds) создает объект, равный new Date(milliseconds).

Когда я пытаюсь new Date(1557419384), я не получаю ожидаемый результат.

Как заметил Мэтт Джонсон, это значение представляется секундами, а не миллисекундами. Умножьте это на 1000.

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