Как разбить текущее время по 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());

→ Ссылка