簡體   English   中英

moment().isValid 當輸入為整數時返回 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;
};

在上面的代碼中,屬性值可以有

  1. 2021-09-29T18:30:00.000Z
  2. 080921

我想確保當 attribute_value 處於 (1) 格式時代碼
modifiedValue = formatDateShortCustom(moment(attribute_value).toDate()); 應該執行。

但是,這個數字字符串也導致isISOFormattrue ,因此導航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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM