我没有看到任何与我的用例匹配的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日期格式,并将在即将发布的主要版本中删除。
这是否有一个干净的解决方案?
答案 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();"}))