我的应用程序存储一些日期的UTC时间戳。例如,时间戳1541638800表示2018年11月8日星期四凌晨1点。
我需要以某种方式确定一天中用时间戳表示的小时数(在给出的示例中,在一天中的1小时)。然后,我需要将它应用到今天的日期,我将其表示为一个JS时刻,即moment().utc().startOf('day').unix()。
总体要求:
Date对象和getHours(),但是它返回了17,这是不正确的。提前感谢!
发布于 2018-12-29 08:28:49
在库中,您需要使用.hours()方法,并且不要忘记像UTC那样解析数据;
moment.utc(data).hours();简单的JS:
从今天到今天,只要设定零小时
let nowDate = new Date();
console.log((nowDate.setMilliseconds(0) - nowDate.setHours(0)) / (1000 * 60 * 60));
发布于 2018-12-29 12:21:43
1541638800代表2018年11月8日(星期四)世界协调时凌晨1时。
所以这个时间戳是从世界协调时1970-01-01年的ECMAScript时代开始的。
日期构造函数的数值是从时代开始的毫秒,所以您必须将它乘以1,000。要获取一天中的UTC小时数,请使用getUTCHours。
如果您想将当前一天的世界协调时间设置为相同的值,请使用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());
https://stackoverflow.com/questions/53967848
复制相似问题