“无效的日期”解析日期moment.js

问题描述:

我试图从给定一个类似如下“无效的日期”解析日期moment.js

周一11月21日11时48分33秒CET 2016

我计算相对日期想在指定日期遵循以下模式:

EEE MMM d HH:MM:SS ZZZ YYYY

所以,我想用这条线来获得相对日期:

moment("Mon Nov 21 11:48:33 CET 2016", "EEE MMM d HH:mm:ss zzz yyyy").fromNow(); 

但是我收到一个“无效的日期” ...

我已经改变了“EEE”为“DDD”以下一些建议,但随后我得到一个坏的相对日期。

时刻( “周一11月21日12:30:40 CET 2016”, “DDD MMM d HH:MM:SS ZZZ YYYY”)。fromNow()>20天前

任何想法关于我做错了什么?

非常感谢!

+0

你包括[时刻,时区(http://momentjs.com/timezone/)?如果不是,那'z'格式说明符是无效的。 (我不是100%确定'即使你是...... zzz'也可以解析...) –

+1

另外,'EEE'应该是'ddd'。 –

+0

是刚刚加入ddd而不是EEE会使它正确 –

假设你除了此刻正在使用moment-timezone,有几个问题:

  1. zzz无效无证;它只是z。 (虽然这似乎被允许。)
  2. EEE无效。 E用于天数。你想要ddd(日期名称)。请参阅the documentation
  3. 您还在或DD(月份中的某天)使用了d(日期名称)。再次看到上面链接的文档。

这适用于瞬间+时刻,时区:

moment("Mon Nov 21 11:48:33 CET 2016", "ddd MMM D HH:mm:ss z yyyy").fromNow(); 
// -------------------------------------^^^-----^----------^ 

例子:

console.log(moment("Mon Nov 21 11:48:33 CET 2016", "ddd MMM D HH:mm:ss z yyyy").fromNow());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.9/moment-timezone-with-data-2010-2020.min.js"></script>

然而,我不觉得瞬间支持对其进行解析时z,因为我可以在Moment Timezone文档中找不到任何东西来说明它增强了解析,并且当我运行上述内容时,它的行为就好像日期/时间在我的时区(GMT)中,而不是CET;事实上,我可以交换任何时区指示符(EST,PST等),它仍然将字符串当作我的本地时间。

对于一周的使用日DDD

检查http://momentjs.com/docs/关于格式的详细信息。

console.log(moment("Mon Nov 21 11:48:33 CET 2016", "ddd MMM d HH:mm:ss zzz yyyy").fromNow());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment.min.js"></script>