2012-07-17 65 views
0

我正在創建一個應用程序,我需要計算當前時間與上一次時間之間的差異時間,該時間將來自數據庫並需要在列表中顯示。該應用程序在印度運行良好,但是當相同的應用程序在美國運行時間顯示在-2560秒或類似的時間差。爲什麼是這樣?時間顯示問題顯示 - 2560秒前,當應用程序在美國運行時

,我用於計算時間之間的差的代碼:

var timeAgoInWords = function(date) { 
    try { 
     var now = Math.ceil(Number(new Date())/1000), 
      dateTime = Math.ceil(Number(new Date(date))/1000), 
      diff = now - dateTime, 
      str; 

     if (diff < 60) { 
      return String(diff) + ' seconds ago'; 
     } else if (diff < 3600) { 
      str = String(Math.ceil(diff/(60))); 
      return str + (str == "1" ? ' minute' : ' minutes') + ' ago'; 
     } else if (diff < 86400) { 
      str = String(Math.ceil(diff/(3600))); 
      return str + (str == "1" ? ' hour' : ' hours') + ' ago'; 
     } else if (diff < 60 * 60 * 24 * 365) { 
      str = String(Math.ceil(diff/(60 * 60 * 24))); 
      return str + (str == "1" ? ' day' : ' days') + ' ago'; 
     } else { 
      return Ext.Date.format(new Date(date), 'jS M \'y'); 
     } 
    } catch (e) { 
     return ''; 
    } 
}; 

上述功能我從itemTpl調用,下面的代碼就是CreatedDate將來自數據庫我保存當用戶提交評論評論,並作爲參數傳遞給函數。

this.posted(Ext.Date.parse(values.CreatedDate, "Y-m-d g:i:s")) 

posted: timeAgoInWords 

這裏就是我的當前日期和時間存儲到數據庫中:

Ext.Date.patterns = { ISO8601Long: "Y-m-d H:i:s" }; 
    var date = new Date(); 
    var now = Ext.Date.format(date, Ext.Date.patterns['ISO8601Long']) 
+0

你確定這不僅僅是一個時區問題嗎?另外,使用'(new Date())。getTime()'而不是'Number(new Date())'。 – 2012-07-17 06:27:09

+0

@FrancisAvila他們會達到同樣的目的。 – alex 2012-07-17 06:37:53

回答

1

這是一個時區的問題。既然美國落後於IST,那麼從時代開始的日期就是過去給你一個日期。因此,這種差異是負面的,因爲您輸入的日期仍然必須在美國發生。建議您將所有時間更改爲UTC,然後再進行任何計算以發現時間差異。你也可以在你自己的服務器上計算差異。