【问题标题】:Error while using javascript Date's "toLocaleString" function使用 javascript Date 的“toLocaleString”函数时出错
【发布时间】:2021-04-20 09:35:47
【问题描述】:
const date = new Date(new Date().toLocaleString("en-US", { timeZone: "IST" }));
date.setDate(date.getDate() + offSet);
console.log(date.toISOString().split("T")[0])  

我在 reactjs 中使用此代码来获取 IST 中的日期,而与当前时区无关。它工作正常,但在我看到的日志(哨兵)中,有时它会抛出这个错误:

RangeError new DateTimeFormat(native) Unhandled error "Expected Area/Location(/Location)* for time zone", got IST

您能否提出可能的问题?

注意:这个问题出现在 chrome、firefox 和 edge 上

【问题讨论】:

    标签: javascript reactjs date datetime


    【解决方案1】:

    错误的原因是 timeZone 的值应该是IANA representative location,而不是民用时区缩写。对于 IST(我假设那是印度标准时间),请使用亚洲/加尔各答:

    console.log('Current date in India: ' + new Date().toLocaleDateString('en-gb',{timeZone:'Asia/Kolkata'}));

    您似乎想要 YYYY-MM-DD 格式的日期。您可以使用产生所需结果的语言代码来做到这一点,例如zh-CA:

    console.log('Current date in India: ' + new Date().toLocaleDateString('en-CA',{timeZone:'Asia/Kolkata'}));

    但是,这让您受制于实现认为 en-CA 的格式应该是什么。最好自己获取零件并格式化:

    function getIndiaDate(date = new Date()) {
      let {year, month, day} = new Intl.DateTimeFormat('en',{
        timeZone: 'Asia/Kolkata',
        year: 'numeric',
        month: '2-digit',
        day: '2-digit'
      }).formatToParts(date)
        .reduce((acc, part) => {
          acc[part.type] = part.value;
          return acc;
        }, Object.create(null));
      return `${year}-${month}-${day}`;
    }
    
    console.log(getIndiaDate());

    图书馆可能会有所帮助。见How to format a JavaScript date

    请注意,使用本地方法(例如 get/setDate)进行日期计算会使用主机区域设置进行偏移,包括夏令时。对于时区和位置感知计算,您确实应该使用支持它们的库。提议的Temporal object 应通过允许 Date 对象具有一组基于 IANA 代表位置的关联偏移规则来解决该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多