簡體   English   中英

如何將具有特定語言環境的日期字符串轉換為 ISO 格式

[英]How to convert date string with specific locale to ISO format

我想將具有特定語言環境(以 IANA 格式定義的語言環境)的日期時間字符串轉換為Date object 並以 ISO 8601 格式打印 UTC 時間。 下面的代碼完美運行。

<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', ()=>{
   console.log(moment('2021-01-01T00:00:00').tz('America/New_York').toISOString());
});
</script>

結果是我的控制台日志顯示2021-01-01T05:00:00.000Z

但是,我想在不使用任何 3rd 方庫的情況下獲得相同的結果。 我只想使用瀏覽器的 Javascript 默認對象/類/api等...所以我嘗試了所有這些,但它們都給出了錯誤:

   new Date("2021-01-01T00:00:00 America/New_York").toISOString();
   (new Date("2021-01-01T00:00:00")).setLocale('America/New_York').toISOString();
   (new Date("January 1, 2021 12:00:00 AM America/New_York").toISOString();

javascript 中的正確方法是在不使用諸如 moment、luxon 等 javascript 庫的情況下將具有區域設置的日期字符串轉換為 ISO 8601 格式的正確方法是什么?

我需要它在 2021 年 1 月 1 日之后發布的任何桌面版 Chrome、FireFox、Edge 和 Safari 中工作(舊版本不需要支持)。

這個 StackOverflow 答案中獲取幫助,可以按如下方式完成。 你快到了。 toLocaleString()是您想要的方法。 顧名思義,它返回一個字符串,因此需要將其轉換回日期 object。 我認為這樣做的笨重是為什么很多人更喜歡使用類似時刻的庫。

new Date(
  new Date("2021-01-01T00:00:00")
    .toLocaleString("en-US", {timeZone: "America/New_York"})
).toISOString();

您可以使用稱為 Intl 的普通 javascript class。

 const newDate = new Date();
console.log(new Intl.DateTimeFormat('en-us', { dateStyle: 'short', timeStyle: 'medium' }).format(newDate))

;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM