比较两个日期时的Moment.js弃用警告

时间:2017-11-03 19:14:54

标签: javascript momentjs

我没有看到任何与我的用例匹配的SO帖子。我试图比较两个日期,看看它们是否匹配。如果他们没有,那么我会显示错误消息。这两个日期的日期格式均为'MM/DD/YYYY'格式,唯一的例外有时可能是'MM/DD/YYYY',有时可能是'M/D/YYYY'

我能够让它工作,但不断得到一个弃用的错误。我尝试使用moment.ISO_8601参数但仍然不断获得已弃用的错误。

if( !moment( start_date, moment.ISO_8601 ).isSame( user_start_date, 
  moment.ISO_8601 ) )
{
    console.log("Both dates must match!");
}
else {
    console.log("Dates match!");
}

不推荐使用的错误如下:

  

moment.js:1弃用警告:提供的值不是公认的RFC2822或ISO格式。时刻构造回落到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非RFC2822 / ISO日期格式,并将在即将发布的主要版本中删除。

这是否有一个干净的解决方案?

2 个答案:

答案 0 :(得分:2)

'MM/DD/YYYY''M/D/YYYY'都不是moment.ISO_8601识别的ISO 8601兼容格式。请参阅moment(String)文档,了解momentjs识别的ISO 8601格式。您必须指定'MM/DD/YYYY'(或'M/D/YYYY')格式,而不是使用moment.ISO_8601

您可以使用moment(String, String[])同时使用'MM/DD/YYYY''M/D/YYYY'。如果您使用strict parsing,则必须执行此操作。请注意:

  

从版本 2.3.0开始, Moment使用一些简单的启发式方法来确定要使用的格式。按顺序:

     
      
  • 首选格式会导致valid日期超过无效日期。
  •   
  • 首选格式解析更多的字符串而不是更少的格式,而不是使用更少的格式,即更喜欢更严格的解析。
  •   
  • 首选阵列中较早的格式。
  •   

例如,使用['MM/DD/YYYY', 'MM/DD/YYYY'],像01/10/2017这样的ambigous输入将始终被解释为1月10日。

此处有一个没有弃用警告的示例:

var start_date = '11/25/2017';
var user_start_date = '27/12/2017';

if( !moment( start_date, ['MM/DD/YYYY', 'M/D/YYYY']  ).isSame( moment(user_start_date, ['MM/DD/YYYY', 'M/D/YYYY'] )) )
{
    console.log("Both dates must match!");
}
else{
    console.log("Dates match!");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>

答案 1 :(得分:1)

我实际上并没有看到这个问题。

http://jsfiddle.net/dbkidd/n9s082bj/

你可以在小提琴中重现它吗?

 reciept=forms.ChoiceField(reciept_types, widget = forms.Select(attrs = {'onchange' : "myFunction();"}))