【问题标题】:Adding certain # of hours to JS moment object向 JS 时刻对象添加特定的小时数
【发布时间】:2019-05-26 19:53:53
【问题描述】:

我的应用程序存储代表某个日期的 UTC 时间戳。例如,时间戳 1541638800 表示 2018 年 11 月 8 日星期四凌晨 1 点 UTC 时间。

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

整体询问:

  1. 如何从 UTC 时间戳获取当天的小时数?尝试使用 Date 对象和 getHours(), ,但它返回 17,这是不正确的。
  2. 如何将这些时间添加到时刻对象?

提前致谢!

【问题讨论】:

  • “如何将这些时间添加到时刻对象?” 是什么意思?你在找momentjsadd吗?

标签: javascript date timestamp momentjs utc


【解决方案1】:

1541638800 表示 2018 年 11 月 8 日星期四凌晨 1 点 UTC

所以时间戳是自 ECMAScript 纪元 1970-01-01 UTC 以来的秒数。

Date 构造函数采用自纪元以来的毫秒数,因此您必须将其乘以 1,000。要获取一天中的 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 有 hourhoursminuteminutes 等方法,它们是一样的。

您也可以使用简单的数学计算小时,因为在 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());

【讨论】:

    【解决方案2】:

    在moment lib中你需要使用.hours()方法,别忘了像UTC一样解析你的数据;

    moment.utc(data).hours();
    

    在简单的 JS 中:

    只需设置零小时即可获得今天和今天之间的差异

    let nowDate = new Date();
    
    console.log((nowDate.setMilliseconds(0) - nowDate.setHours(0)) / (1000 * 60 * 60));

    【讨论】:

    • 嗯,但我试图获取小时数的原始日期是过去的日期,不一定是今天。这个解决方案还能用吗?
    • 试试 .hours();这种方法可以给你几个小时;最终解决方案 moment.utc(oldData).hours();
    猜你喜欢
    • 2020-05-06
    • 2010-11-06
    • 2019-02-19
    • 2017-09-08
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多