Есть ли способ проверить, имеют ли две даты одинаковые меридиемы (am/pm) с moment.js?isSame meridiem with moment.js?
В документах функция isSame предоставляет примеры тестирования на день, месяц и т. Д., Но не на меридиум.
Есть ли способ проверить, имеют ли две даты одинаковые меридиемы (am/pm) с moment.js?isSame meridiem with moment.js?
В документах функция isSame предоставляет примеры тестирования на день, месяц и т. Д., Но не на меридиум.
Ничего не сделано для точного сравнения, но вы можете просто отформатировать оба момента как маркер меридиума (a) и сравнить результат.
moment().format('a') === moment('2016-01-01T11:00').format('a')
Это имеет то преимущество, что фактически работает с любым языковым стандартом. В некоторых местах они имеют больше показателей Meridiem, чем AM/PM. Возьмем, к примеру азербайджанца:
moment.locale('az')
moment('2016-01-01T02:00:00').format('hh a')
"02 gecə"
moment('2016-01-01T05:00:00').format('hh a')
"05 səhər"
moment('2016-01-01T13:00:00').format('hh a')
"01 gündüz"
moment('2016-01-01T18:00:00').format('hh a')
"06 axşam"
Глядя в исходном коде, я вижу это на белорусском языке, бенгальском, тибетском, и этот список можно продолжать и дальше.
Если вы хотите полный список, перейдите в папку локалей в источнике секундного: https://github.com/moment/moment/tree/develop/src/locale
В каждой местности, вы увидите функцию полудня. Это определяет поведение, которое вы получаете для этого токена.
Если вы не хотите этого поведения и хотите, чтобы ваш код всегда запускался как «до полудня» или «после полудня», вы всегда можете просто быстро перевернуть клон момента в стандартную локаль:
moment('2016-01-01T18:00:00').clone().locale('en').format('a')
Это, кажется, не существует в moment.js. Не должно быть так сложно, хотя:
Math.floor(time1.hour()/12) == Math.floor(time2.hour()/12);
Если вы собираетесь использовать это много, и хотите, чтобы сделать вещи легче на себя, вы можете даже добавить его в Moment себя (я, вероятно, получить некоторые сильные аргументы против расширения сторонних библиотек, но это просто очень удобно ...)
что-то вроде этого:
moment.prototype.isSameMeredian = function(compareWith) {
if (! moment.isMoment(compareWith)) {
return false; // or throw an error or something
}
return Math.floor(this.hour()/12) == Math.floor(compareWith.hour()/12)
}
и вы могли бы использовать его как это:
var time1 = moment();
var time2 = moment().subtract(12, 'hours');
var time3 = moment().add(5, 'minutes');
console.log(time1.isSameMeredian(time2), time1.isSameMeredian(time3));
Это должно регистрироваться false
true
, за исключением между 11:55 и 12:00, где второй результат должен быть ошибочным, по очевидным причинам.
Спасибо! Это хорошо работает. Мои навыки в Википедии не могли стать третьим меридием, отличным от am или pm. Примеры? – jedierikb
Отредактировано. Я сам должен был посмотреть в наш источник. Источник должен быть достаточно надежным. Почти у каждого языкового стандарта было несколько встроенных динамиков. –
Это отличный и полезный ответ, а также действительно образовательный. Спасибо! – jedierikb