Когда выполняется new Date()
, создается экземпляр Дата со значением времени, которое представляет текущее время UTC.
Для хостов с точными часами и правильной настройкой часового пояса даты, созданные в один и тот же момент, будут иметь значение времени независимо от того, где находится хост или его настройки часового пояса. Однако в эпоху «интернета вещей» хост может быть любым из огромного множества устройств, где часы и настройки могут быть не точными.
Так что вам действительно не следует полагаться на то, что клиент точен и использует время сервера для важных дел.
Когда вы делаете:
var date = new Date()
var ms = date.getTime();
var msPerDay = 86400 * 1000;
var timestamp = ms - (ms % msPerDay);
вы устанавливаете время для начала дня UTC. Это эквивалентно:
var timestamp = new Date().setUTCHours(0,0,0,0);
Для 2018-11-02 это будет: 1541116800000.
Вы можете сохранить это, если хотите, но, возможно, вы хотите сохранить его как удобочитаемую дату, в этом случае:
var timestamp = new Date().toISOString().slice(0,10); // 2018-11-02 on 2 Nov 2018
может подойти, но обычно рекомендуется использовать полную строку, поэтому:
var d = new Date();
d.setUTCHours(0,0,0,0);
var timestamp = d.toISOString(); // 2018-11-02T00:00:00Z on 2 Nov 2018
Обратите внимание, что дата UTC отличается от локальной даты для периода смещения местного часового пояса (поэтому с полуночи до 05:30 по местному времени в Индии будет отображаться вчерашняя дата).
console.log(
new Date(new Date().setUTCHours(0,0,0,0)).toISOString()
);