簡體   English   中英

如何在JavaScript中查找日期是否在當前日期之前

[英]How to find if date if before current date in javascript

日期以yyyy-mm-dd字符串的形式存儲在javascript中,其時間部分始終為0,例如

今天是

"2016-09-04T00:00:00"

如何查找日期是否在當前日期之前? 我試過了

alert(new Date("2016-09-04T00:00:00") < new Date());

但是如果今天是2016-09-04,則返回true與錯誤

new Date()也返回時間,這將產生錯誤的結果。

如何只比較日期部分?

今天的日期應該轉換為僅用於比較字符串的前10個字符的字符串和子字符串,還是有更好的選擇?

我從引用的問題中讀取了答案,但尚未找到針對該問題的明確答案。 這些答案描述了日期相等性比較的通用解決方案。 此問題詢問如何查找日期部分是否在當前日期之前。

您缺少時區偏移量。 試試這個: https : //jsfiddle.net/WalterIT/ved5a3hp/

dateA = new Date("2016-09-05T00:00:00");
offset = dateA.getTimezoneOffset() * 1000 * 60;
dateA = dateA.getTime() + offset;
dateB = new Date().setHours(0,0,0,0);

我已將其更改為5號(在我的時區中已經是今天。請根據需要進行修改)

嘗試

var old = new Date("2017-09-04T00:00:00").getTime();
var curr  = Date.now();


alert((old < curr));

並更改年份進行測試。

試試dates.compare(a,b)-date是一個對象。 返回一個數字。 -1、0或1。

由於瀏覽器之間的差異,不建議使用Date構造函數解析字符串。

在這種情況下,符合ES5及更高版本的瀏覽器會將“ 2016-09-04T00:00:00”解析為2016年9月4日午夜的“本地”日期和時間。某些瀏覽器(例如Safari)將錯誤地解析將其視為UTC。 請參閱上述建議。

但是,在所有瀏覽器中, new Date()都會為當前時刻而不是一天開始的午夜創建日期。 因此,如果您在2016年9月4日運行此代碼,則除非您在當地時間正好00:00:00.000運行它,否則new Date()的時間將在00:00:00.000之后。

如果要比較兩者,則在一天的開始將new Date()的時間部分設置為午夜,例如

 // Returns false on 5 September, 2016 local time console.log(new Date('2016-09-05T00:00:00') < new Date().setHours(0,0,0,0)); 

上面的方法適用於大多數瀏覽器,因為<運算符將第一個Date 強制轉換為其內部時間值,而setHours的返回值是第二個Date的調整后的時間值。

注意

在創建兩個日期時都應使用主機系統時區偏移量,因此對兩個日期都具有相同的影響,因此在這種情況下可以忽略。

強烈建議您不要依賴使用Date構造函數或Date.parse解析字符串(它們等效於解析)。 始終手動解析字符串。 為您需要處理的格式使用定制功能,或者使用庫並提供要解析的格式。 這是您可以確保正確解析的唯一方法。

在日期對象上使用Gettime函數而不是對其進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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