Moment.js 2.10.6版本中,是否存在更简便的isPM判断方法?
关于Moment.js 2.10.6中判断AM/PM的问题
嘿,我来帮你理清这个问题:
你的初始判断代码是正确的
首先可以确定,你给出的那段判断AM/PM的代码在Moment.js 2.10.6版本里是完全可行的。在这个版本中,localeData().isPM()方法的设计就是需要传入格式化后的'A'类型字符串(也就是"AM"或"PM")来完成时段判断,所以你的测试逻辑没问题:
// AM 时段判断 var m = moment("2018-05-16 11:59:59 GMT-0600"); m.localeData().isPM(m.format('A')) // 返回 false // PM 时段判断 var m = moment("2018-05-16 12:00:00 GMT-0600"); m.localeData().isPM(m.format('A')) // 返回 true
实现你想要的简化写法
确实,原生写法有点繁琐,不过Moment.js允许我们通过扩展原型来添加自定义方法,刚好能实现你期望的moment(...).local().isPM()调用方式。因为local()返回的还是Moment实例,我们可以给moment.fn(Moment的原型对象)添加这个方法:
// 给Moment实例扩展isPM方法 moment.fn.isPM = function() { // 内部复用你原来的逻辑,只是封装成实例方法 return this.localeData().isPM(this.format('A')); };
添加完这段扩展代码后,你就可以像预想的那样简洁调用了:
moment("2018-05-16 11:59:59 GMT-0600").local().isPM() // false moment("2018-05-16 12:00:00 GMT-0600").local().isPM() // true
需要注意的是,这段扩展代码要保证在你调用isPM()之前执行,比如放在项目的Moment初始化代码里,这样所有Moment实例都能使用这个方法啦。
内容的提问来源于stack exchange,提问作者jbobbins
相关产品推荐
相关产品推荐

