В формате LT
учитывается языковой стандарт.
Вот несколько примеров:
moment().locale('en-CA').format('LT') //=> "1:21 PM"
moment().locale('fr-CA').format('LT') //=> "13:21"
moment().locale('fi-FI').format('LT') //=> "13.21"
moment().locale('de-DE').format('LT') //=> "13:21"
moment().locale('no-NO').format('LT') //=> "1:21 PM"
moment().locale('th-TH').format('LT') //=> "13:21"
moment().locale('en-GB').format('LT') //=> "13:21"
Обратите внимание, что страница Oracle, на которую вы ссылались, является частью документации Solaris 8 - операционной системы, которая вышла в феврале 2000 года и достигла конца срока службы в марте 2012 года. Она крайне ошибочна в отношении форматов времени, используемых в этих страны и языки. Вы не должны использовать это как ссылку.
Также обратите внимание, что он допустил серьезную ошибку, предполагая, что "канадский" был достаточен для полной идентификации локали. Как показано выше, франкоязычные канадцы используют 24-часовые часы, но многие англоязычные канадцы иногда используют 12-часовые часы (см. обозначение времени в Канаде ), и, таким образом, en-CA
дает 12-часовой формат в то время как fr-CA
дает 24-часовой формат.
Таким образом, одной страны недостаточно. Локаль должна состоять как минимум из языка, но обычно необходимы и язык, и страна. Теперь они называются «языковые теги IETF» и стандартизированы BCP 47 .
Что касается того, почему немецкая локализация Moment не включает в результат строку Uhr
, это было то, что было сначала добавлено с # 1601 , но затем удалено с # 2006 - оба в 2014 году. См. Эти вопросы для рассуждения.
Также обратите внимание, что строки локализации Moment взяты из комментариев, предоставленных сообществом, и участников, внесших изменения. Во многих случаях они соответствуют стандартам, сопоставленным с Unicode CLDR , но в некоторых случаях они отличаются. Если вы ищете современную библиотеку дат с поддержкой стандартизированной локализации, рассмотрите Luxon , которая использует API интернационализации, встроенные в современные браузеры.