我的应用存储了代表某个日期的UTC时间戳。例如,时间戳1541638800代表UTC时间2018年11月8日(星期四)。
我需要以某种方式确定由时间戳表示的一天中的小时数(在给定的示例中,是一天中的1个小时)。然后,我需要将此日期应用于今天的日期,我将它表示为一个JS时刻,即moment().utc().startOf('day').unix()
。
总体询问:
Date
对象和getHours()
进行了尝试,但返回了17个错误。谢谢!
答案 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());