javascript - momentjs isValid 在应该为 true 时返回 false,反之亦然

标签 javascript jquery html excel momentjs

使用 HTML、javascript 和 jQuery,我使用“xlsx.full.min.js”从 MS Excel 导入日期。我已将 MS Excel 中的日期字段设置为文本,以便 MS Excel 在导出时不会更改其格式。导入后,我将解析创建的表以验证每个字段。为了验证我使用的日期字段:

var dateFormat = 'DD/MM/YYYY';
alert("$(this).text(): " + $(this).text());
alert(moment(moment($(this).text()).format(dateFormat),dateFormat,true).isValid());

当 MS Excel 日期字段包含“13/12/2018”时,返回 false。当 MS Excel 日期字段包含“12/13/2018”时,返回 true。这两个值都显示在警报中,因此我知道它们正在正确传递。

由于我已将日期格式设置为“DD/MM/YYYY”,为什么该格式失败而“MM/DD/YYYY”通过?

最佳答案

MomentJS 在对其执行操作之前将日期从字符串转换为其对象。如果未指定格式,则采用默认格式。解析操作解释如下:https://momentjs.com/docs/#/parsing/string/

因此,在您的情况下,您必须在创建 moment 对象时传递日期格式。像这样:

var dateFormat = "DD/MM/YYYY";
moment("12/13/2018",dateFormat).isValid() //will return false
moment("13/12/2018",dateFormat).isValid() //will return true

更新:

MomentJS 允许解析日期,即使指定的日期包含除格式之外的其他字符。例如,“1A/2B/2018”将被视为有效日期“1/2/2018”。

为了避免这种情况,并检查格式和日期是否完全匹配,应向 moment 对象传递一个附加 bool 值以启用严格模式。

moment("1A/2B/2018", dateFormat).isValid() //will return true
moment("1A/2B/2018", dateFormat, true).isValid() //will return false

关于javascript - momentjs isValid 在应该为 true 时返回 false,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589252/

相关文章:

jquery - 页面底部的 div

javascript - 使用 'Input' 中的值作为变量

javascript - 检查数组javascript中的字符串

javascript - 使用 Underscore 重构对象数组

javascript - AngularJS/JQuery - 没有关联标签的表单输入

javascript - 检查至少一个复选框已选中 jquery Validate

javascript - 如何使用 JavaScript 从 YouTube channel URL 获取 channel ID

javascript - 从数组中删除项目时,数据未反射(reflect)在 UI 上

javascript - 获取 HTML 表单 Post 方法的返回值

javascript - Meteor:分享模板