2016-03-29 52 views
0

我有一個標準輸入類型=日期字段,輸出一個值,如「2016-03-28」,當其發佈時,以及一個時間選擇器在發佈時會輸出類似「10:30 pm」的值。我需要檢查日期和時間的組合是否相對於EST(東部標準時區)過去。什麼是最好的方法來做到這一點?計算日期選擇器+時間選擇器是否在過去的東部標準時區

+0

計算的日期和時間東部標準時間(大概是美國時間),看看它是在日期之前還是之後。你有什麼嘗試?獲得特定抵消的時間並不困難。 – RobG

+0

是的,我正在推翻它。我不知道抵消事情是如何工作的。我發佈瞭如何在下面做到這一點。 –

回答

0

我是這樣做的:

 var entryDate = $("input[name='launchDate']").val(); 
     var entryTime = $("input[name='launchtime']").val(); 
     var morningEvening = entryTime.slice(-2); 
     var fixedTime; 
     if (morningEvening === "am") { 
      fixedTime = entryTime.split('am').join(' AM'); 
     } else { 
      fixedTime = entryTime.split('pm').join(' PM'); 
     } 

     var newDate = new Date(entryDate + " " + fixedTime); 
     var inputDate = newDate.toLocaleString(); 
     var offset = -5.0; 

     var clientDate = new Date(); 
     var utc = clientDate.getTime() + (clientDate.getTimezoneOffset() * 60000); 

     var newYork = new Date(utc + (3600000*offset)); 
     var newYorkDate = newYork.toLocaleString(); 

     if (inputDate < newYorkDate) { 
      console.log("It's in the past"); 
     } else { 
      console.log("It's in the future"); 
     } 
+0

使用Date構造函數解析字符串**強烈推薦使用* toLocaleString *(它完全依賴於實現並在不同的瀏覽器中產生不同的結果)生成的字符串似乎不是一個好主意。 – RobG

0

鑑於日期分開輸入,比如2016年3月28日和時間喜歡晚上10:30你應該分析這兩個生產日期。要將日期視爲EST(推測爲US -05:00),請使用UTC方法創建日期並添加5個小時。

一種日期「現在」將有一個UTC時間值,以便您可以使用原樣,然後就直接比較的Date對象:

/* @param {string} ds - date string in format yyyy-mm-dd 
 
** @param {string} ts - time string in format hh:mmap 
 
** @returns {Date} Date with time value for equivalent EST time 
 
*/ 
 
function parseDateTimeAsEST(ds, ts) { 
 
    var b = ds.split(/\D/); 
 
    var c = ts.split(/\D/); 
 
    c[0] = +c[0] + (/pm$/i.test(ts)? 12 : 0); 
 
    return new Date(Date.UTC(b[0], b[1]-1, b[2], c[0]+5, c[1])); 
 
} 
 

 
// Is now before or after 2016-03-28T22:30:00-05:00? 
 
document.write(new Date() < parseDateTimeAsEST('2016-03-28','10:30pm')? 'before' : 'after'); 
 

 
document.write('<br>'); 
 

 
// Is now before or after 2016-04-01T01:30:00-05:00? 
 
document.write(new Date() < parseDateTimeAsEST('2016-04-01','01:30am')? 'before' : 'after');