2014-01-09 74 views
1

我正在開發移動應用程序並構建我正在使用的日期對象以下日期字符串。但是我需要輸出的時間字符串比輸入時間更奇怪。JavaScript返回時間不正確

錄入時間:

2014-01-09T20:40:00 

輸出時間:

10th January, 2:10am 

要Constuct我使用日期對象下面的代碼

var date = new Date('2014-01-09T20:40:00'); 

Dates.getAMPMTimeFromDateObject = function (date) { 
      var dateSuffix = Constants.Formatting.DateAMSuffix, 
       hours = date.getHours(), 
       minutes = date.getMinutes(), 
       minutesString; 

      hours = (hours + 24) % 24; 

      if (hours === 0) { 
       hours = 12; 
      } else if (hours > 12) { 
       hours = hours % 12; 
       dateSuffix = Constants.Formatting.DatePMSuffix; 
      } else if (hours === 12) { //This is specific fix for 12PM exceptional case 
       dateSuffix = Constants.Formatting.DatePMSuffix; 
      } 

      minutesString = (minutes < 10) ? '0' + minutes : minutes; 

      return hours + ':' + minutesString + dateSuffix; 
     }; 
+0

你檢查你的時區? – Yunzhou

+0

嘗試使用此api來處理日期[Moment JS](http://momentjs.com/) – Ravi

+0

你能顯示輸出錯誤時間的代碼嗎? – ColinE

回答

1

您絕對需要指定ISO日期字符串的時區。這是一個跨瀏覽器兼容性問題。

如果不指定時區:

  • 鉻假定您的輸入是UTC
  • 火狐/ IE假設您輸入本地

速戰速決將明確使用UTC:

var date = new Date('2014-01-09T20:40:00Z'); //note 'Z' for "zero-offset" 

但是,舊版瀏覽器甚至不理解ISO日期/時間輸入,請謹慎使用。

日期/時間字符串的兼容性方便的參考:http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html

2

你的問題很可能是由於時區。您是否位於half-hour timezone offset的國家?

您的輸出時間使用當前語言環境進行了明確的格式化。

換句話說,你的約會沒有錯!您需要考慮如何處理代碼中的時區。

通常,確保您的日期在您的代碼中爲GMT,在解析/序列化日期時使用ISO date/time format,並且在向用戶顯示時僅將日期轉換爲特定的時區。