具有自定义格式的Moment.js isSame()在FireFox中不起作用

时间:2016-09-16 05:58:33

标签: javascript firefox momentjs

由于firefox的硬编码格式isSame,当自定义日期格式为MM-DD-YYYY时,我无法让2016-09-16T05:46:57.745Z函数在Firefox中运行。

是否可以在Firefox中使用MM-DD-YYYY制作isSame?在Chrome中不是问题

jo = new moment().format('MM-DD-YYYY')
"09-16-2016"
mom
"09-16-2016"
moment(jo, 'MM-DD-YYYY')
Object { _isAMomentObject: true, _i: "09-16-2016", _f: "MM-DD-YYYY", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2016-09-16T05:00:00.000Z }
moment(jo, 'MM-DD-YYYY').isSame(mom)
false
moment(jo, 'MM-DD-YYYY').isSame(mom, 'day')
false

2 个答案:

答案 0 :(得分:0)

只需使用new Date()

检查firefox是否为您提供了正确的时间戳

Firefox的日期

Firefox's Date

Chrome的日期

Chrome's Data

这可能是错误验证的可能原因。

答案 1 :(得分:0)

mom变量是一个不在识别的ISO格式中的字符串,因此控制台会给您以下警告:

  

弃用警告:提供的值不是公认的ISO格式。时刻构造回落到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非ISO日期格式,并将在即将发布的主要版本中删除。有关详细信息,请参阅http://momentjs.com/guides/#/warnings/js-date/

片刻isSame会尝试将mom字符串转换为时刻对象,但正如parsing docs所说:

  

警告:浏览器支持解析字符串is inconsistent。因为没有关于应该支持哪种格式的规范,所以在某些浏览器中有效的功能在其他浏览器中不起作用。

     

要解析除ISO 8601字符串以外的任何内容的一致结果,您应该使用String + Format

正如您在链接表中看到的那样,Firefox中不支持MM-DD-YYYY格式的字符串。

我建议你解析mom字符串指定格式,这样你就会有:

var jo = moment();
var mom = "09-16-2016";
// Parse string into moment object, specifying format
mom = moment(mom, 'MM-DD-YYYY');
var eq1 = moment(jo, 'MM-DD-YYYY').isSame(mom);
console.log(eq1); // false, different hours/minutes
var eq2 = moment(jo, 'MM-DD-YYYY').isSame(mom, 'day')
console.log(eq2); // true
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>