gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:06:35 26 4
gpt4 key购买 nike

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

当我使用 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 来获取该格式?

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

最佳答案

很不清楚你在问什么。如果您希望 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());

关于javascript - 从没有时区的日期获取 ISO 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43670062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com