[英]isValid() function from moment.js library returns false for something that should be true
[英]moment().isValid returns true when the input is in integers
代碼:
let modifiedValue = attribute_value;
let isISOFormat = moment(new Date(attribute_value), moment.ISO_8601, true).isValid();
if (isISOFormat) {
modifiedValue = formatDateShortCustom(moment(attribute_value).toDate());
}
return modifiedValue;
};
在上面的代碼中,屬性值可以有
2021-09-29T18:30:00.000Z
080921
我想確保當 attribute_value 處於 (1) 格式時代碼modifiedValue = formatDateShortCustom(moment(attribute_value).toDate());
應該執行。
但是,這個數字字符串也導致isISOFormat
為true
,因此導航formatDateShortCustom
方法,我不想要?
我做錯了什么嗎?
我建議將其包裝在 function isISOFormat()
中,並使用它來確定您的輸入是否為 ISO 8601 日期字符串。
我還建議將輸入直接傳遞給 moment() 構造函數,而不是先創建 Date:
let attribute_values = ['2021-09-28T11:45:00Z', new Date().toISOString(), 20, null, '28/09/2021', 'is this a date?']; function testIsISOFormat() { for(let attribute_value of attribute_values) { console.log(`isISOFormat(${attribute_value}):`, isISOFormat(attribute_value)); } } function isISOFormat(input) { return moment(input, moment.ISO_8601, true).isValid(); } console.log('Testing isISOFormat:'); testIsISOFormat()
.as-console-wrapper { max-height: 100%;important: top; 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
moment.ISO_8601
在版本2.7.0
以下undefined
。
這就是為什么moment
會嘗試解析值,而不管您是否設置了嚴格的解析選項。 moment
檢查字符串是否匹配已知的 ISO 8601 格式。
我建議明確地將格式作為第二個參數傳遞。
console.log(moment('2021-09-29T18:30:00.000Z', 'YYYY-MM-DDTHH:mm:ss.SSSZ', true).isValid()); console.log(moment('080921', 'YYYY-MM-DDTHH:mm:ss.SSSZ', true).isValid());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.