首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有函数以地区字符串格式获取UTC日期?

是否有函数以地区字符串格式获取UTC日期?
EN

Stack Overflow用户
提问于 2019-03-30 00:59:44
回答 7查看 9K关注 0票数 6

我希望在JavaScript中获得当前的UTC日期,但以本地日期格式显示它(就像Date.toLocaleDateString()那样)。

我最初尝试使用Date.toUTCString()获取当前的UTC日期,但实际上并没有以本地格式打印出来。

然后我尝试使用toLocaleDateString()中的选项配置,但这只是打印本地日期,而不是本地格式的UTC日期。例如新的Date().toLocaleDateString(options = {timeZone: "UTC"})

然后,我尝试使用Intl.DateTimeFormat()进行格式化,但结果与Date.toLocaleDateString()相同。

如果有一种方法可以获得地区格式,那么我很乐意使用该格式来格式化UTC日期,但据我所知,没有。

例如,给定new Date("Sat, 30 Mar 2019 00:27:19 GMT"),在美国,我应该打印出"3/30/2019",在欧洲,我应该打印出"30/3/2019",等等,为每个受支持的地区。

然而,new Date("Sat, 30 Mar 2019 00:27:19 GMT").toLocaleDateString(options = {timeZone: "UTC"})将打印"3/29/2019“。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2019-04-08 10:57:37

我还希望像toLocaleDateString()一样使用本地化字符串设置显示日期,但使用日期的UTC值,而不是本地时区。

例如:

我确实想要本地化的字符串格式,但我也想要UTC值而不是本地时区值。本例中所需的输出是4/3/2019,而不是4/2/2019

我承认了@AndersonHappens的建议,但我没有使用它。相反,我是这样做的:

有一个getTimezoneOffset()函数,它提供本地时区偏移量。

我们可以使用这个函数的结果,并创建一个新的Date,应用diff。然后,我们可以像往常一样直接使用toLocaleDateString()获取本地化字符串格式的日期:

作为一个函数,解决方案可以如下所示:

代码语言:javascript
运行
复制
function toLocaleUTCDateString(date, locales, options) {
    const timeDiff = date.getTimezoneOffset() * 60000;
    const adjustedDate = new Date(date.valueOf() + timeDiff);
    return adjustedDate.toLocaleDateString(locales, options);
}
票数 9
EN

Stack Overflow用户

发布于 2019-03-30 01:45:49

给定日期,您可以使用new Intl.DateTimeFormat()获得区域设置格式。然后可以使用formatToParts来获取日期和每个特定组件的格式。

按照文档中的示例,我创建了以下方法以获取地区字符串中的UTC日期。

代码语言:javascript
运行
复制
function toLocaleUTCDateString(date) {
  let formatter = new Intl.DateTimeFormat();
  return formatter.formatToParts(date).map(({type, value}) => { 
    switch (type) {
      case 'day': return date.getUTCDate();
      case 'hour': return date.getUTCHours();
      case 'minute': return date.getUTCMinutes();
      case 'month': return date.getUTCMonth() + 1;
      case 'second': return date.getUTCSeconds();
      case 'timeZoneName': return "UTC";
      case 'year': return date.getUTCFullYear();
      default : return value; 
    } 
  }).reduce((string, part) => string + part);
}

但是,请注意,此方法不记得数字与字符串格式。例如,如果要将3月显示为“want”(或特定的语言月份字符串),而不是显示为数字3,则必须自己决定如何做到这一点。它也不处理工作日的差异,所以如果当地的日期是“周五”,而世界贸易委员会的日期是“星期六”,你也必须分开计算。

票数 3
EN

Stack Overflow用户

发布于 2022-01-24 22:58:17

您几乎正确地理解了- timeZone选项在第二个参数中是可用的。toLocaleDateString的第一个参数是区域设置。

当选项是第二个参数(并且比其他答案简单得多)时,您的问题中的这个示例会起作用:

代码语言:javascript
运行
复制
const usLocale = 'en-US'
new Date('Sat, 30 Mar 2019 00:27:19 GMT').toLocaleDateString(usLocale, {
  timeZone: 'UTC',
})
// '3/30/2019'

const ukLocale = 'en-GB'
new Date('Sat, 30 Mar 2019 00:27:19 GMT').toLocaleDateString(ukLocale, {
  timeZone: 'UTC',
})
// '30/03/2019'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55427168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档