【问题标题】:cs-Cz locale and JavaScript new Date Constructor doesn't allow for shorthand datecs-Cz 语言环境和 JavaScript 新日期构造函数不允许速记日期
【发布时间】:2021-02-06 21:04:17
【问题描述】:

所以我正在尝试关注 MDN 上关于格式化日期选项的文档

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat

对于 cs-cz 语言环境,我希望月份在编写日期时采用“短”手形式,例如

19. 12. 2012 而不是19. pro 201

此代码适用于 en-us 或 it-it(意大利)等语言环境。

var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0, 200));
var options = { month: 'short', day: 'numeric', year: 'numeric'};
console.log(new Intl.DateTimeFormat('en-us', options).format(date));

打印出Dec 19, 2012

谁能帮助我让 cs-cz 语言环境正常工作。这段代码

var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0, 200));
var options = { month: 'short', day: 'numeric', year: 'numeric'};
console.log(new Intl.DateTimeFormat('cs-cz', options).format(date));

打印出来

19. 12. 2012 而不是19. pro 201

我想19. pro 201 使用 JavaScript 日期函数。这在我基于 13 种语言环境的代码中都是动态的,而捷克语是唯一给我带来麻烦的。

【问题讨论】:

  • 由特定语言代码创建的实际格式没有标准化,这就是“本地化”的重点。它还强调格式化在很大程度上是个人意见:在捷克语中的短短一个月,对于编写 Intl.DateTimeFormat 实现的人来说,与您对它应该是什么的看法不同。它还强调将语言代码称为“区域设置”是用词不当。

标签: javascript date locale


【解决方案1】:

肯定是一个奇怪的难题。事实证明,如果您在选项对象中包含week 格式,它会提供您寻求的输出。所以下面的简单代码使用它,然后从字符串中删除周名称。

我没有修改年份,这将由您决定,但我相信这可以解决您的问题并回答您的问题。

const options = { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' };
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0, 200));
const out = date.toLocaleDateString('cs-CZ', options).split(' ').splice(1).join(' ');
console.log(out);

【讨论】:

  • 是的,谢谢——这就是我最终要走的路线。我猜 JavaScript 日期构造函数中有一个错误。谢谢只是希望还有其他问题。
  • 您可以随时向 TC-39 提交错误。 github.com/tc39/ecma262
  • @gary1410 — 与 Date 构造函数无关。 Date.prototype.toLocaleDateString 的选项基于 ECMA-402,它是与 ECMAScript (ECMA-262) 完全不同的规范,是关于格式化,而不是构造。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2010-11-22
  • 2011-01-13
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
相关资源
最近更新 更多