Версия 2.xx (выпуск)
Быстрое решение
Использование aaaaa'm'
:
format(new Date(), "YYYY-MM-DD hh:mm aaaaa'm'")
Объяснение: @GollyJer обнаружил действительно умный способ обойти это ограничение. Мы можем использовать aaaaa
для получения a
(для AM) или p
(для PM) в соответствии с документацией . Затем мы просто следуем за ним с экранированным символом m
, который равен 'm'
, что приводит к am
или pm
.
Примечание: это может привести к неправильному выводу, если вы разрешите любой вид переключения локали, поскольку AM и PM могут различаться в зависимости от языка.
Другие способы
Тем не менее, для этих версий нет native¹ способа сделать это, согласно документации и проверке исходного кода, потому что форматирование зависит от конфигурации локали, как показано в исходном коде ( _lib/format/formatters/index.js
):
// AM or PM
a: function(date, token, localize) {
var hours = date.getUTCHours()
var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'
switch (token) {
case 'a':
case 'aa':
case 'aaa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
})
// ...
1: по нативному, я имею в виду простой нативный API-форматер.
Вы можете добавить новую локаль , чтобы настроить строки. Это подразумевало бы изменение этой специфицированной c части (на основе locale/en-US/_lib/localize/index.js
):
var formattingDayPeriodValues = {
// ...
abbreviated: {
am: 'AM',
pm: 'PM',
// ...
}
// ...
}
Печально, что в этой новой версии нет простого способа настройки локалей по умолчанию или даже просто простой способ применить обезьяну-патч. Создание новой локали совсем не изящно, и замена a.m.
на am
вручную после вызова format
тоже не подходит.
Версии 1.xx и 2.0.0 (альфа / бета) )
Для этих версий просто используйте формат a
. Пример:
console.log(dateFns.format(new Date(), 'YYYY-MM-DD hh:mm a'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>
<!-- or: https://cdnjs.cloudflare.com/ajax/libs/date-fns/2.0.0-alpha0/date_fns.min.js -->
Вы можете проверить в исходном коде как это работает:
var meridiemLowercase = [
'am',
'pm'
];
var formatters = {
// ...
'a': function (date) {
return date.getHours() / 12 >= 1 ? meridiemLowercase[1] : meridiemLowercase[0];
},
// ...
}