Время эпохи Javascript в днях

Мне нужно время эпохи в днях. Я видел сообщения о том, как перевести его на сегодняшний день, но ни одного за несколько дней. У меня довольно плохо со временем эпохи ... как я мог получить это?


person dman    schedule 05.10.2012    source источник
comment
Вы имеете в виду 1 января 1970 года, время с тех пор в днях или как?   -  person bms    schedule 05.10.2012


Ответы (1)


Мне нужно время эпохи в днях

Я интерпретирую, что вам нужно количество дней, прошедших с эпохи. Сама эпоха — это нулевой день (или начало первого дня, как бы вы ни хотели его просмотреть).

В основе объекта Date javascript лежит число миллисекунд с 1970-01-01T00:00:00Z. Таким образом, чтобы получить количество дней с того момента до настоящего времени, вы просто получаете текущее значение времени и делите его на количество миллисекунд в одном дне:

var now = new Date();
var fullDaysSinceEpoch = Math.floor(now/8.64e7);

Для 2012-10-05 вы должны получить 15618. Не уверен, что это позволяет использовать дополнительные секунды и тому подобное, но оно должно быть достаточно близким (в течение нескольких секунд), если системные часы точны.

Только при чтении значений объекта Date (например, getHours() и toString()), что для указания местного времени применяется смещение часового пояса.

person RobG    schedule 05.10.2012
comment
Мы добавляем високосные секунды только каждый год или два, поэтому пройдут десятки тысяч лет, прежде чем их будет достаточно, чтобы повлиять на этот расчет. - person Barmar; 05.10.2012
comment
@Barmar - круто, но около полуночи может быть момент, когда количество дней превышает один. В любом случае, на системные часы нельзя полагаться на такую ​​точность. :-) - person RobG; 05.10.2012
comment
Это не работает в часовом поясе GMT+8 - чтобы заставить его работать, мне пришлось использовать: (date.getTime() - date.getTimezoneOffset()*60000)/8.64e7 - person Brian Flynn; 23.05.2019
comment
@BrianFlynn - тогда ваше представление о работе отличается от ОП. - person RobG; 23.05.2019
comment
@RobG - можешь пояснить, что ты имеешь в виду? Я нахожусь в GMT+8. Если я использую ваш код как есть, я получаю результат, который отличается на 1 день. Мне нужно вычесть 8 часов из моих дат, чтобы получить правильное количество дней с начала эпохи. - person Brian Flynn; 24.05.2019
comment
@BrianFlynn - ОП хочет дни эпохи (UTC), а не местные дни. Даты ECMAScript указаны в формате UTC, поэтому деление на мс/день дает дни UTC. Если у вас +8 часов, то в ноль часов UTC вы уже +8. Скажем, в 20:00 UTC вы будете в 04:00 следующего дня, поэтому целые дни UTC равны нулю, но ваши целые локальные дни равны 1. Кстати, ваш минус смещение часового пояса фактически добавляет смещение, поскольку в ECMAScript смещение равно +8 часов представлены как -480 минут, следовательно, вы получаете местные дни. Я надеюсь, что в этом есть смысл. :-) - person RobG; 25.05.2019