【问题标题】:How to convert zulu time to UTC +01:00 without moment [duplicate]如何在没有时刻的情况下将祖鲁时间转换为 UTC +01:00 [重复]
【发布时间】:2022-01-22 19:21:45
【问题描述】:

您好,我有一个以 2020-05-25T20:11:38Z 格式到达的日期,我需要转换为 2020-05-25T21:11:38+01:00。 在我的项目中没有安装moment.js是个大项目,高手们不用。 有什么地方可以做这个改变吗?

我有每个区域的时区。 我知道有这样的选项 getTimezoneOffset(); 我确实在stackoverflow中找到了,但是我没有在javascript中找到任何响应来将zulu更改为带有偏移量的utc。

感谢您的指点

【问题讨论】:

  • 几个小时前我回答了一个类似的问题。您可以转换为 ISOString,将 Z 替换为 +01:00 并创建一个新日期
  • let date = new Date("2020-05-25T20:11:38Z"); const isoString = date.toISOString(); const ZPlus1 = isoString.replace("Z","+0100"); date = new Date(ZPlus1);
  • 但如果您需要根据时区将 +01 设为 +03。你怎么能达到?谢谢你的方法。很有用
  • 看看其他骗子——那里有足够的工具

标签: javascript datetime


【解决方案1】:

格式“2020-05-25T20:11:38Z”是一种通用的标准 ISO 8601 格式,它也是由默认的 Date.prototype.toString 方法生成的,但它只有一个UTC (+0) 偏移量。

上面的 ISO 8601 格式被当前的内置解析器可靠地解析(一些非常老的实现不能正确解析它),所以要获取一个 Date 对象:

let date = new Date('2020-05-25T20:11:38Z');

可以通过调整偏移的日期然后利用默认的 toISOString 方法将其格式化为固定的 +1 偏移,例如

// Initial timestamp
let s = '2020-05-25T20:11:38Z'

// Convert s to a Date
let d = new Date(s);
// Show that it's the same date
console.log(`Initial value: ${s}\n` +
            `Parsed value : ${d.toISOString()}`);

// Create a new date with 1 hour added as 3,600,000 milliseconds
let e = new Date(d.getTime() + 3.6e6);

// Format and manually modify the offset part
let timestamp = e.toISOString().replace('Z','+01:00');
console.log(`Adjusted timestamp: ${timestamp}`);

// Parse back to date
console.log(`Parsed to a Date  : ${new Date(timestamp).toISOString()}`);

可以将生成的时间戳解析回一个日期,该日期表示与原始字符串(最后一行)相同的时间。

请注意,调整后的日期只是为了格式化时间戳而创建的,不应用于其他任何用途。

另一方面,如果您想要一个通用函数将日期格式化为带有本地偏移量的 ISO 8601,Javascript date format like ISO but local 可能有一个适合的答案。如果是这样,那么这是重复的,例如this answerthis one

此外,有许多库允许将格式设置和时区指定为单独的参数,因此如果您要进行大量日期格式设置或操作,请考虑使用其中一个。

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 2020-02-25
    • 2018-06-27
    • 2021-03-23
    • 2021-05-31
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多