使用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”通过?
答案 0 :(得分:1)
MomentJS将日期从字符串转换为对象,然后再对其执行操作。如果未指定格式,则采用默认格式。解析操作的解释如下:https://momentjs.com/docs/#/parsing/string/
因此,在您的情况下,必须在创建矩对象时传递dateformat。像这样:
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("1A/2B/2018", dateFormat).isValid() //will return true
moment("1A/2B/2018", dateFormat, true).isValid() //will return false