Globalize/Cldr : Globalize.formatDate(new Date(), {datetime:long}) дал что-то вроде 16 января 2017. 13.30.17 GMT+1

У меня есть приложение ASP.NET MVC 5, и моя загрузка Globalization/Validation (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(новая дата(), {datetime:"long"});

дает неожиданный результат. Вместо двоеточия в качестве разделителя времени я получил точку: «16 января 2017 года. 07.57.17 GMT+1». репозиторий JSON выглядит нормально в шаблонах «timeFormats» и «dateTimeFormats». Все в порядке с «en» или «de», которые имеют аналогичные шаблоны времени и даты, определенные в репозитории.

Где я не прав?


person Dragan Mihajlović    schedule 16.01.2017    source источник


Ответы (1)


Точка — это не разделитель, а часть длинного формата даты и времени.

Выходные данные "16. januar 2017. 07.57.17 GMT+1", которые вы получаете для длинного формата даты и времени локали "sr-Latn", состоят из (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

person Rafael Xavier    schedule 16.01.2017
comment
Дата и интервал между датой и временем указаны правильно. Временной части нет. Вместо точек разделитель между часами, минутами и секундами должен быть двоеточием (:). - person Dragan Mihajlović; 16.01.2017
comment
Разделитель времени взят из github.com/unicode-cldr/cldr-numbers-full/blob/30.0.3/main/ - person Rafael Xavier; 17.01.2017
comment
Разделитель времени находится в number.json!. Логически!! Если бы вы не дали мне ссылку на меня, я бы никогда не нашел его! Спасибо! - person Dragan Mihajlović; 17.01.2017
comment
Просто прочитав форматы, мне не показалось очевидным, что {0} — это время, а {1} — это дата, тем более что принято говорить дата-время. Однако в документации это проясняется: unicode.org/reports/tr35/ tr35-dates.html#dateTimeFormat - person cjbarth; 29.12.2019