'2012-12-12' < '2013-11-12' // truenew Date('2012-12-12') < new Date('2013-11-12') // true
兩者產生相同的結果。但是當我搜索一些比較字串格式日期的示例代碼時,每個人都將其轉換為日期型別。然后第一個例子可能是問題,但我不確定什么時候可能是問題。讓我知道更多細節。請!
uj5u.com熱心網友回復:
'2012-12-12' < '2013-11-12' // 真
將日期作為字串進行比較。ISO 8601 格式的一個好處是時間戳可以正確地與字串進行比較,前提是偏移量(如果有)是相同的。例如
'2022-01-06T09:00:00 10:00' < '2022-01-06T00:00:00Z'
應該是true,但它回傳false,而:
new Date('2022-01-06T09:00:00 10:00') < new Date('2022-01-06T00:00:00Z')
回傳 true(原因見下文)。但是將其他日期格式作為字串進行比較幾乎可以肯定是行不通的,例如使用 d/m/y 格式:
01/03/2020 < 01/02/2021
回傳 false 因為 "03" 中的 "3" 大于 "02" 中的 "2" 并且這是比較得到的結果。
然后是:
new Date('2012-12-12') < new Date('2013-11-12') // true
之所以有效,是因為兩個時間戳都被決議為 UTC 以生成時間值(一個數字值,即日期與 1970 年 1 月 1 日的偏移量,以毫秒為單位)。<運算子將 Date 物件強制轉換為原語,在這種情況下,該原語有效地呼叫valueOf回傳時間值,因此比較簡化為:
1355270400000 < 1384214400000
這就是為什么字串經常被決議為 Date 物件進行比較的原因。但是請注意,雖然:
'2022-01-06' == '2022-01-06' // true
轉換為日期時:
new Date('2022-01-06') == new Date('2022-01-06') // false
因為兩個物件(日期或其他)永遠不會==或===彼此,所以:
new Date(/* anything */) == new Date(/* anything */)
始終為假,即使兩個 Date 物件都表示無效日期。如果要查看它們是否相等,請比較時間值:
new Date('2022-01-06').getTime() == new Date('2022-01-06').getTime()
但是在決議字串時要小心,請參閱Why does Date.parse give wrong results?
uj5u.com熱心網友回復:
永遠不要對日期使用字串文字(尤其是在 JavaScript 中,一切都是鴨子)進行比較!
Dates 和 DateTimes 很奇怪,在編程中實際上并不可用,但由于我們需要對它做一些事情,所以我們有點“跳過整體——這太瘋狂了——部分”。
只是為了好玩,您可能想閱讀 Jon Skeet 的博客文章:https ://codeblog.jonskeet.uk/2012/05/02/more-fun-with-datetime/
但是只是為了爭論,將日期與文字日期進行比較將解決'2021-02-23' < 'AA'其中的真偽(沒有嘗試過),但是對于 JavaScript,比較是相似的,沒有型別比較,它只是值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411013.html
標籤:
上一篇:Hivetrunc日期格式問題
