【问题标题】:How do I get today's UTC date/time for 00:00:00 in JavaScript?如何在 JavaScript 中获取今天 00:00:00 的 UTC 日期/时间?
【发布时间】:2018-11-01 06:24:50
【问题描述】:

当我输入以下 sn-p 代码时:

new Date('2018-11-01')

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

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

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

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

目前,我有以下 sn-p 应该可以实现我的目标,但感觉有点尴尬,因为我将从时刻获得的字符串转换回日期对象。

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

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

【问题讨论】:

  • 我相信 momentJS 提供了获取 UTC 时间的工具
  • 我很难在文档中找到它:( 一切似乎都是关于在 UTC 时间转换/显示,而不是在 UTC 时间的 00:00:00 获取今天的日期/时间

标签: javascript datetime momentjs


【解决方案1】:

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

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

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

需要注意的是,这也可以通过传入日期作为常规函数使用。

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

不过,在我看来,使用上面显示的带有日期扩展名的调用更容易。

【讨论】:

  • 提醒一下,不要弄乱原型链,避免未来的 SmooshGates。
  • 一如既往,视情况而定。这是一个用途广泛的图书馆吗?那么是的,应该避免弄乱这个原型链,简单的函数是更好的方法。这只是在脚本标签内运行吗?那么以易于开发的方式设计页面是完全有意义的,尤其是如果你坚持使用 vanilla 并且不使用 3MB 的外部库。
【解决方案2】:

您可以手动构建它。这是香草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);

【讨论】:

    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多