将某些小时数添加到JS moment对象

时间:2018-12-29 08:12:24

标签: javascript date timestamp momentjs utc

我的应用存储了代表某个日期的UTC时间戳。例如,时间戳1541638800代表UTC时间2018年11月8日(星期四)。

我需要以某种方式确定由时间戳表示的一天中的小时数(在给定的示例中,是一天中的1个小时)。然后,我需要将此日期应用于今天的日期,我将它表示为一个JS时刻,即moment().utc().startOf('day').unix()

总体询问:

  1. 如何从UTC时间戳获取一天中的小时数?使用Date对象和getHours()进行了尝试,但返回了17个错误。
  2. 如何将这些时间添加到时刻对象中?

谢谢!

2 个答案:

答案 0 :(得分:0)

在lib时刻,您需要使用.hours()方法,并且不要忘记像UTC那样解析您的数据;

moment.utc(data).hours();

在简单的JS中:

只需在今天和今天之间设置零时差即可

let nowDate = new Date();

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

答案 1 :(得分:0)

  

1541638800代表2018年11月8日星期四UTC时间

因此,时间戳记是自1970年1月1日UTC的ECMAScript时代以来的秒数。

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具有用于 hour hours minute minutes 的方法,例如彼此一样。

考虑到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());