与moment.js同心的meridiem?

时间:2016-04-01 21:08:35

标签: javascript momentjs

有没有办法检查两个日期是否与moment.js具有相同的meridiem(am / pm)?

在文档中,isSame函数提供了日,月等测试的示例,但不适用于meridiem。

2 个答案:

答案 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之间除外,其中第二个结果也应该是假的,原因很明显。