Как разбить текущее время по 4 часа и получить timestamp?
// Деление времени по 4 часа это 0, 4, 8, 12, 16, 20 часов
let now = new Date(1639226579465);
console.log(now); // 2021-12-11T12:42:59.465Z
console.log(now.getTime()); // 1639226579465
console.log(now.getHours()); // 15
// Нужно получить timestamp равному 2021-12-11 12:00:00
// Если к примеру время 2021-12-11 03:12:44, то 2021-12-11 00:00:00
// 4 часа это 14400 секунд
// Пытался составить формулу, но не работает
now = new Date(Math.ceil(1639226579465 / (14400 * 1000)) * 14400 * 1000 - ((14400) * 1000));
console.log(now);
console.log(now.getTime());
// Получаю 15, а должно 12, так как он между 12, 16
console.log(now.getHours());
Ответы (1 шт):
Автор решения: IvaMuxa
→ Ссылка
Метод getHours() возвращает часы указанной даты по местному времени.
let now = new Date(1639226579465);
console.log(now); // 2021-12-11T12:42:59.465Z
console.log(now.getTime()); // 1639226579465
console.log(now.getHours()); // 15
console.log(now.getUTCHours()); //12
console.log("----");
let time4 = (1639226579465 - 1639226579465 % 14400000);
now.setTime(time4);
console.log(now);
console.log(now.getTime()); //15
console.log(now.getUTCHours()); //12
Объект Date возвращает timestamp по UTC и когда вы получаете правильный результат по UTC 4,8,12,16,20 то с учётов местного времени получается сдвиг на 3 часа у вас и вы видите вместо этого 7, 11, 15, 19 или 23 если же нужно по местному времени то можно так
let now = new Date();
let hours = now.getHours();// часов по местному времени с учётом часового пояса
console.log(hours);
let hours4 = hours - hours%4;
console.log(hours4);
Если же нужно получить прямо timestamp то можно так сделать
let now = new Date();
let hours = now.getHours();
let h4 = hours % 4;
now.setHours(hours - h4);
console.log(now);
console.log(now.getTime());
console.log(now.getHours());