有没有办法检查两个日期是否与moment.js具有相同的meridiem(am / pm)?
在文档中,isSame函数提供了日,月等测试的示例,但不适用于meridiem。
答案 0 :(得分:4)
没有内置任何内容可以进行精确比较,但您可以将两个时刻格式化为meridiem标记(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"
查看源代码,我也看到了白俄罗斯语,孟加拉语,藏语,这个名单还在继续。
如果您想要完整列表,请转到Moment的源代码中的locales文件夹: https://github.com/moment/moment/tree/develop/src/locale
在每个区域设置中,您都会看到一个meridiem函数。这定义了您为该令牌获得的行为。
如果您不想要这种行为,并且您希望您的代码始终只是在中午之前运行,那么'或者在中午之后,你可以随时快速将当前的克隆翻转回默认语言环境:
moment('2016-01-01T18:00:00').clone().locale('en').format('a')
答案 1 :(得分: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));
这应记录false
true
,但在11:55和12:00之间除外,其中第二个结果也应该是假的,原因很明显。