如何在JavaScript中获取00:00:00的今天UTC日期/时间?

时间:2018-11-01 06:24:51

标签: javascript datetime momentjs

当我输入以下代码片段时:

new Date('2018-11-01')

我得到一个代表以下ISO字符串的日期对象。

"2018-11-01T00:00:00Z"

我相信它代表2018年11月1日00:00:00的UTC日期/时间。

如何以编程方式获取当天00:00:00的UTC日期/时间对象?

目前,我有以下代码段可以实现我的目标,但由于将从瞬间返回的字符串转换为日期对象,因此感觉有点尴尬。

new Date(moment().format('YYYY-MM-DD'))

希望看到使用Vanilla JS或诸如momentJS之类的库的一站式解决方案。

2 个答案:

答案 0 :(得分:1)

您可以手动构造它。这是香草JS中的解决方案:

function getUTCMidnight(dateObj) {
  let date = `${dateObj.getUTCDate()}`.padStart(2, "0");
  let month = `${dateObj.getUTCMonth() + 1}`.padStart(2, "0");
  let year = dateObj.getUTCFullYear();
  return new Date(`${year}-${month}-${date}T00:00:00Z`);
}

function getCurrentUTCMidnight() {
  return getUTCMidnight(new Date());
}

console.log(getCurrentUTCMidnight());
console.log(getCurrentUTCMidnight().getTime());
console.log(getCurrentUTCMidnight() instanceof Date);

答案 1 :(得分:1)

您可以使用简单的函数扩展Date对象。例如,如果您使用的是制图软件,并且需要在几个不同的地方调用UTCfloor以正确对齐数据,则这是理想的选择。它有助于保持通话的简便性。

Date.prototype.UTCfloor = function () {
    return new Date(Date.UTC(this.getUTCFullYear(), this.getUTCMonth(), this.getUTCDate()));
};

console.log(new Date().UTCfloor());

请注意,也可以通过传入Date来将其用作常规函数。

function UTCfloor(date){
    return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
}

尽管如此,我认为使用上面显示的带有日期扩展名的呼叫会更容易。