Короткий ответ: если вы используете момент. js, то используйте его для всего расчета (см. Ниже).
Ваш алгоритм вычитания 3 дней не работает, потому что алгоритм неправильно. «Рабочая» версия кода OP находится внизу. Дано:
var timestampMinus3Days = timestampNow - (timestampNow % (interval1H * 24 * 3));
, где timestampNow является значением времени ECMAScript , а интервал 1H равен 3,6e6 мс.
значение времени составляет миллисекунды с 1970-01-01 UT C (эпоха ECMAScript), а %
является оператором остатка, который подобен по модулю, но не совсем .
Выражение timestampNow % (interval1H*24*3)
делит время с начала эпохи на 3 дня и получает остаток, поэтому вы устанавливаете новую дату на целое число, кратное 3 дням с 1 января 1970 года, а не 3 дням go. Таким образом, каждые 3 дня вычисление будет возвращать дату в течение 3 дней go, а в другие два дня - 1 или 2 дня go.
Остальное также включает время в текущем дне UT C, поэтому, если вы получаете 00:00:00, ваш часовой пояс должен быть +0 (GMT или UT C). Другие получат время, эквивалентное их смещению часового пояса, и дату за предыдущий день, если их смещение от UT C будет отрицательным.
Вот как это сделать с моментом. js и избежать путаницы со временем значения:
// 3 days ago from now
console.log(moment().subtract(3, 'days').format('DD.MM.YYYY HH.mm.ss'));
// 3 days ago at the start of the day
console.log(moment().subtract(3, 'days').startOf('day').format('DD.MM.YYYY HH.mm.ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Рабочая версия кода операции:
var timestampNow = moment().valueOf();
var interval1H = 60 * 60 * 1000;
var timestampMinus3Days = timestampNow - (timestampNow % (interval1H*24*3));
console.log("Calculated time: " + moment(timestampMinus3Days).format("DD.MM.YYYY HH.mm.ss"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>