【问题标题】:Convert JS date format into localized human readable format将 JS 日期格式转换为本地化的人类可读格式
【发布时间】:2019-08-20 14:11:45
【问题描述】:

考虑到与系统区域设置不同的语言,我应该如何在 JS 中将日期格式 YYYY-MM-DD 转换为人类可读格式 %e %B %Y

在 PHP 中是这样的

<?php echo trim(strftime('%e %B %Y', strtotime('2019-07-31'))); ?>
// Renders: 31 July 2019

我想要相同的,但具有相应的语言区域设置,例如“法语格式”,所以它将变为:31 Julillet 2019

==== 更新 ====

正如@Baljinder Singh 提到的,链接下方的解决方案非常有效

console.log(
  new Date('2019-07-31').toLocaleDateString('fr-FR', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  })
)

【问题讨论】:

标签: javascript date


【解决方案1】:

如果它是特定于浏览器的,那么您可以使用 window.navigator.language 使其动态化。

const date = new Date('2019-07-31').toLocaleDateString(window.navigator.language, {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
});

console.log(date);

注意:在 chrome 和 firefox 中运行良好。

【讨论】:

  • window.navigator.language 不可靠。
  • @RobG 为什么不可靠
  • 如果你正在处理 NodeJS 那么你可以使用req.headers["accept-language"]
  • 它是不可靠的,因为它不要求它是准确的,所以它不是。许多用户不知道如何设置或更改它。一些浏览器不会从系统设置中读取它,即使可以,它也可能会出现隐私或身份问题,因此它们可能不会。最好的解决方案是询问用户,然后使用明确的形式,例如始终使用月份名称或缩写而不是数字。 PS 在线隐私正在成为一个大问题,希望人们尽可能匿名。如果访问者使用的是 DE VPN,但他们的浏览器语言是 en-NZ,这说明了什么? ;-)
【解决方案2】:

试试

let d = new Date('2019-08-20');

let s = d.toLocaleDateString(navigator.languages,{day:"numeric", month:"long", year: "numeric"});

console.log(s);

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2018-04-22
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多