从没有时区的日期获取 ISO 字符串

新手上路,请多包涵

我的配置是里斯本时区。当我做 new Date() 我得到我当前的本地日期/时间是 Fri Apr 28 2017 01:10:55 GMT+0100 (GMT Daylight Time)

当我使用 toISOString() 获取 ISO 字符串时,它将应用时区,我将得到:

 2017-04-28T00:10:55.964Z

问题是几分钟前的日期时间是这样的(昨天):

 2017-04-27T23:45:05.654Z

我尝试了 moment.js(新手),我做了这样的事情

document.write(moment('2017-04-28').format())

但我得到这个 2017-04-28T00:00:00+01:00 这不是 2017-04-28T00:00:00.000Z

我想将此值作为 restful 方法的参数传递,以将其自动解析为 DateTime 类型,但如果我传递 moment.js 格式的输出,那么它将被解析为 2017-04-27 23:00:00.00

如果我使用 new Date()new Date('2017-04-27') (日期部分)创建新日期,我只想获取如下没有时区的 ISO 格式:

 2017-04-28T00:00:00.000Z

是否有像 toISOString() 这样的 javascript 方法或使用 maybe moment 来获取该格式?

无论什么时区或一天中的哪个时刻,我都只是模拟给定日期的午夜。

原文由 Maximus Decimus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 339
1 个回答

很不清楚你在问什么。如果您希望 UTC 日期的小时数始终为 0,则将 UTC 小时数设置为 0 并使用 toISOString ,例如

 var d = new Date();
d.setUTCHours(0,0,0,0);
console.log(d.toISOString());

当然,这将显示 UTC 日期,该日期可能与生成日期的系统上的日期不同。

还,

 new Date('2017-04-27').toISOString();

应该 返回 2017-04-27T00:00:00Z(即根据 ECMA-262 应该将其解析为 UTC,这与将其视为本地的 ISO 8601 相反),但这在所有使用的实现中都不可靠。

如果你只想获取 ISO 8601 格式的当前日期,你可以这样做:

 if (!Date.prototype.toISODate) {
  Date.prototype.toISODate = function() {
    return this.getFullYear() + '-' +
           ('0'+ (this.getMonth()+1)).slice(-2) + '-' +
           ('0'+ this.getDate()).slice(-2);
  }
}

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

但是,由于内置的 toISOString 使用 UTC,这可能会造成混淆。如果需要 UTC 日期,则:

 if (!Date.prototype.toUTCDate) {
  Date.prototype.toUTCDate = function() {
    return this.getUTCFullYear() + '-' +
           ('0'+ (this.getUTCMonth()+1)).slice(-2) + '-' +
           ('0'+ this.getUTCDate()).slice(-2);
  }
}

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

原文由 RobG 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题