Globalize / Cldr : Globalize.formatDate(new Date(), datetime:"long") 导致类似“16. januar 2017.

Posted

技术标签:

【中文标题】Globalize / Cldr : Globalize.formatDate(new Date(), datetime:"long") 导致类似“16. januar 2017. 13.30.17 GMT+1”【英文标题】:Globalize / Cldr : Globalize.formatDate(new Date(), datetime:"long") resulted in something like "16. januar 2017. 13.30.17 GMT+1"Globalize / Cldr : Globalize.formatDate(new Date(), datetime:"long") 导致类似“16. januar 2017. 13.30.17 GMT+1” 【发布时间】:2017-01-16 07:36:09 【问题描述】:

我有 ASP.NET MVC 5 应用程序,我的全球化/验证 (Globalize 1.2.2) 负载是:

<script src="~/Scripts/cldr.js"></script>
<script src="~/Scripts/cldr/event.js"></script>
<script src="~/Scripts/cldr/supplemental.js"></script>
<script src="~/Scripts/globalize.js"></script>
<script src="~/Scripts/globalize/number.js"></script>
<script src="~/Scripts/globalize/date.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.globalize.js"></script>

<script type="text/javascript">
        $.when(
            $.getJSON("@Url.Content("~/Scripts/cldr/supplemental/likelySubtags.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/supplemental/numberingSystems.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/supplemental/timeData.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/supplemental/weekData.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/main/en/numbers.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/main/en/ca-gregorian.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/main/en/timeZoneNames.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/main/sr-Latn/numbers.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/main/sr-Latn/ca-gregorian.json")"),
            $.getJSON("@Url.Content("~/Scripts/cldr/main/sr-Latn/timeZoneNames.json")")
    ).then(function () 
        console.log("start slicing");
        return [].slice.apply(arguments, [0]).map(function (result) 
            console.log("slicing done");
            return result[0];
        );
    ).then(Globalize.load).then(function () 
        Globalize.locale('sr-Latn');
    ).then(console.log("LOADED EVERYTHING"));
</script>

但是现在,当我尝试在浏览器调试器中进行测试时,命令:

Globalize.formatDate(new Date(), datetime:"long");

给出了意想不到的结果。取而代之的是冒号作为时间分隔符,我得到了一个点:“2017 年 1 月 16 日。07.57.1​​7 GMT+1”。 JSON repository 在“timeFormats”和“dateTimeFormats”模式中看起来不错。 使用 "en" 或 "de" 一切正常,它们在存储库中定义了类似的时间和日期模式。

我哪里错了?

【问题讨论】:

【参考方案1】:

不是分隔符,而是长日期时间格式的一部分。

"sr-Latn" 语言环境的长日期时间格式的 "16. januar 2017. 07.57.17 GMT+1" 输出由 (a) "16. januar 2017. 长日期格式、(b) 空格分隔符 " " 和 (c) "07.57.17 GMT+1" 组成长时间格式。

注意dateTimeFormats.long = "1 0" 是日期和时间(即空格分隔符)、dateFormats.long = "dd. MMMM y."(即年之后有一个)和timeFormats.long = "HH:mm:ss z" 的粘合剂 .

用作时间分隔符的来自"timeSeparator": "."

话虽如此,如果您认为年份后的 不正确,或者分隔符应该是 逗号 而不是 空格,请向 CLDR 提交工单:http://unicode.org/cldr/trac/newticket

【讨论】:

日期和时间之间的日期和空格是正确的。时间部分不是。相反,点、小时、分钟和秒之间的分隔符必须是冒号 (:)。 时间分隔符来自github.com/unicode-cldr/cldr-numbers-full/blob/30.0.3/main/… 时间分隔符,位于“numbers.json!”中。逻辑上!!如果你没有给我链接,我永远找不到它!谢谢! 阅读0 是时间和1 是日期的格式对我来说似乎并不明显,特别是因为通常说日期时间。但是,文档将其清除:unicode.org/reports/tr35/tr35-dates.html#dateTimeFormat

以上是关于Globalize / Cldr : Globalize.formatDate(new Date(), datetime:"long") 导致类似“16. januar 2017.的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CLDR 中提交数据

Globalize.js - 如何解析日期和时间而不仅仅是日期

什么是通用语言环境数据存储库(CLDR)-JDK 9 [关闭]

Globalize.js 十进制数字验证的错误值

在 Rails 中对 Globalize3 表进行简单搜索

Rails 3包含翻译globalize3 activerecord