Добавление определенного количества часов к объекту момента JS - PullRequest
0 голосов
/ 29 декабря 2018

мое приложение хранит метки времени UTC, представляющие некоторую дату.Например, временная метка 1541638800 представляет четверг 8 ноября 2018 года в 1:00 по UTC.

Мне нужно как-то определить количество часов в дне, которые представлены временной меткой (в данном примере 1 час вдень).Затем мне нужно применить это к сегодняшней дате, которую я представлял как момент JS, то есть moment().utc().startOf('day').unix().

Общий вопрос:

  1. Как я могу получить количество часовв день из отметки времени UTC?Пробовал использовать объект Date и getHours(), но он вернул 17, что неверно.
  2. Как я могу добавить эти часы к мгновенному объекту?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

1541638800 представляет четверг 8 ноября 2018 года в 1:00 UTC

Таким образом, отметка времени составляет секунды с момента ECMAScript 1970-01-01 UTC.

Конструктор Date принимает числовое значение, которое составляет миллисекунды с начала эпохи, поэтому его необходимо умножить на 1000.Чтобы узнать количество часов UTC в дне, используйте getUTCHours .

Если вы хотите установить часы UTC для текущего дня на то же значение, используйте setUTCHours , например

var value = 1541638800;
var utcHr = new Date(value * 1e3).getUTCHours();
var d = new Date();
d.setUTCHours(utcHr, 0,0,0);
console.log(d.toISOString());

Или с помощью moment.js:

// Create a date using seconds time value
var d = moment.unix(1541638800);
// Set date to use UTC, not local
d.utc();
// Create a date for today
var m = moment();
// Set to UTC
m.utc();
// Set hour to same hours as d, zero minutes, etc.
m.hour(d.hour()).minute(0).second(0).millisecond(0);

console.log(m);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>

moment.js имеет методы для час и часов , минута и минуты и т. д., которые совпадают друг с другом.

Вы также можете получить час, используя обычную математику, учитывая, что в день ECMAScript UTC ровно 8,64e4 секунды:

var value = 1541638800
// Round down to UTC hour
var utcHr = (1541638800 % 8.64e4) / 3.6e3 | 0;
var d = new Date();
d.setUTCHours(utcHr, 0,0,0);
console.log(d.toISOString());
0 голосов
/ 29 декабря 2018

в момент lib вам нужно использовать метод .hours (), и не забудьте проанализировать ваши данные как UTC;

moment.utc(data).hours();

в простом JS:

Просто получите diff сегодняи сегодня с установленными нулями часов

let nowDate = new Date();

console.log((nowDate.setMilliseconds(0) - nowDate.setHours(0)) / (1000 * 60 * 60));
...