2016-04-01 3 views
0

Есть ли способ проверить, имеют ли две даты одинаковые меридиемы (am/pm) с moment.js?isSame meridiem with moment.js?

В документах функция isSame предоставляет примеры тестирования на день, месяц и т. Д., Но не на меридиум.

ответ

4

Ничего не сделано для точного сравнения, но вы можете просто отформатировать оба момента как маркер меридиума (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') 
+0

Спасибо! Это хорошо работает. Мои навыки в Википедии не могли стать третьим меридием, отличным от am или pm. Примеры? – jedierikb

+0

Отредактировано. Я сам должен был посмотреть в наш источник. Источник должен быть достаточно надежным. Почти у каждого языкового стандарта было несколько встроенных динамиков. –

+0

Это отличный и полезный ответ, а также действительно образовательный. Спасибо! – jedierikb

0

Это, кажется, не существует в 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)); 

Это должно регистрироваться falsetrue, за исключением между 11:55 и 12:00, где второй результат должен быть ошибочным, по очевидным причинам.

Смежные вопросы