当我输入以下代码片段时:
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之类的库的一站式解决方案。
答案 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()));
}
尽管如此,我认为使用上面显示的带有日期扩展名的呼叫会更容易。