2011-03-02 85 views
3

我有兩個日期/時間戳:jQuery/JS - 如何比較兩個日期/時間戳?

d1 = 2011-03-02T15:30:18-08:00 
d2 = 2011-03-02T15:36:05-08:00 

我想上面比較兩種:

if (new Date(d1) < new Date(d2)) {alert('newer')} 

但是,這似乎並沒有正常工作。有沒有辦法比較日期和時間?感謝

UPDATE:

console.log(d1 + ' ' + d2); 
console.log(new Date(d1) > new Date(d2)) 


2011-03-02T15:30:18-08:00 2011-03-02T15:36:05-08:00 
false 
2011-03-02T15:30:18-08:00 2011-03-02T15:30:18-08:00 
false 
2011-03-02T15:30:18-08:00 2011-03-02T14:15:04-08:00 
false 
+1

你有一個字符串形式的時間戳,還是你確實有「日期」的實例? (我問,因爲這些賦值語句是語法錯誤,因爲他們目前的立場。) – Pointy 2011-03-02 23:51:14

+0

假是正確的答案。 「2011-03-02T15:30:18-08:00」不大於「2011-03-02T15:36:05-08:00」。 – 2011-03-03 00:04:01

+0

另外,除了第一個控制檯消息外,d1中的所有內容都很奇怪。他們都以「36:515」開頭 – 2011-03-03 00:04:54

回答

12

你的時間戳應弦。

var d1 = "2011-03-02T15:30:18-08:00"; 
var d2 = "2011-03-02T15:36:05-08:00"; 

if (new Date(d1) < new Date(d2)) {alert('newer')} 

例子:http://jsfiddle.net/hKPkF/

+0

@patrick我不確定日期是否正確解析。我得到'Thu Mar 03 2011 00:30:18 GMT + 0100(中歐標準時間)'爲第一個。 – 2011-03-02 23:54:16

+0

他們是字符串,這只是寫了問題的一個愚蠢。所以日期不僅會比較日期,還會與時間/秒的詳細程度進行比較./ – AnApprentice 2011-03-02 23:54:45

+0

@ŠimeVidas:正在爲您當地的時區進行分析。 – 2011-03-02 23:55:47

2

似乎爲我工作得很好,但你必須正確格式化(即分號,引號):

var d1 = "2011-03-02T15:30:18-08:00"; 
var d2 = "2011-03-02T15:36:05-08:00"; 

if(new Date(d1) < new Date(d2)) {alert('newer')}; 

是的,它需要一定的時間到帳戶。如果你這樣做:

alert(new Date(d1) - new Date(d2)); 

你得到347000,其爲347秒,即5分鐘47秒。這是兩者之間的正確區別。

+0

工作謝謝但請參閱上面,它總是返回false。 – AnApprentice 2011-03-03 00:01:33

+0

閱讀我在問題中的評論。 – 2011-03-03 00:06:37

+0

非常有趣,如果我做(新日期(d1) - 新日期(d2))我得到NaN – AnApprentice 2011-03-03 00:10:45

4

您可能會遇到日期字符串格式的問題。我越來越無效的日期,如果我做的:

new Date("2011-03-02T15:30:18-08:00"); 

下面是我有什麼適用於Chrome:

var d1 = "Thu Mar 03 2011 00:53:54 GMT+0100 (CET)"; 
var d2 = "Thu Mar 03 2011 03:53:54 GMT+0100 (CET)"; 

if (new Date(d1) < new Date(d2)) {console.log('newer')} 

如果您在服務器端紅寶石工作,你可以轉換爲UTC從Time目的。這裏,它是一個小按摩轉換爲格式是相同的JavaScript的日期對象toUTCString方法:

tm = Time.new 
utc_tm = tm.getutc 
utc_tm.strftime("%a, %d %b %Y %H:%M:%S GMT") 

輸出:"Thu, 03 Mar 2011 00:46:55 GMT"

+0

這似乎是問題,我在軌道上,是否有我需要做的datestamp對話? – AnApprentice 2011-03-03 00:11:20

+0

嘗試轉換爲UTC,格式如下:'Thu,03 Mar 2011 00:20:57 GMT'。 – madsj 2011-03-03 00:42:14

1

變種D1 =「2011-03-02T15:30:18 -08:00',d2 ='2011-03-02T15:36:05-08:00'; 某些瀏覽器可以使用新的Date或Date.parse將ISO字符串轉換爲Date。

今天很多瀏覽器都無法使用 - 您可能需要編寫自己的轉換。

這一個似乎工作,但它需要改進。基於mozilla org的公共代碼,我添加了一個沒有array.map的瀏覽器。

Date.fromISO= function(s){ 
    var day, tz, 
    rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, 
    p= rx.exec(s) || []; 
    if(p[1]){ 
     day= p[1].split(/\D/).map(function(itm){ 
      return parseInt(itm, 10) || 0; 
     }); 
     day[1]-= 1; 
     day= new Date(Date.UTC.apply(Date, day)); 
     if(!day.getDate()) return NaN; 
     if(p[5]){ 
      tz= parseInt(p[5], 10)*60; 
      if(p[6]) tz += parseInt(p[6], 10); 
      if(p[4]== "+") tz*= -1; 
      if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz); 
     } 
     return day; 
    } 
    return NaN; 
} 
Array.prototype.map= Array.prototype.map || function(fun, scope){ 
    var L= this.length, A= [], i= 0; 
    if(typeof fun== 'function'){ 
     while(i< L){ 
      if(i in this) A[i]= fun.call(scope, this[i], i, this); 
      ++i; 
     } 
     return A; 
    } 
} 
var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00'; 
alert(Date.fromISO(d1)-Date.fromISO(d2)+' milliseconds') 
1

鑑於瀏覽器之間日期格式和功能的差異,我真的推薦您使用專門用於DateTime處理的庫。 JS對它的支持是非常可怕的。我是日期的巨大粉絲。JS

http://www.datejs.com/