2016-09-14 1560 views
4

我已經使用加載和讀取加載,並且到目前爲止浪費了大約3個小時。我無法相信它如此強硬。Javascript/jquery/Moment.js計算兩個日期之間的天數

我有一個Javascript/jquery應用程序,我已經安裝了moment.js插件。 我正在寫一個POS應用程序,我需要計算兩個日期之間的天數差異,所以我可以警告用戶特定的退貨項目可能太舊而無法退貨。

我發現在JS這看起來不錯,似乎是這樣做的流行方式的代碼,雖然我只是無法得到它的工作

var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds 
var firstDate = new Date(2008,01,12); 
var secondDate = new Date(2008,01,22); 

var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); 

我也試過這種使用Moment.js,這看起來真的很整齊

var a = moment([2007, 0, 29]); 
var b = moment([2007, 0, 28]); 
var x = a.diff(b); 

後者將是我的首選技術。但在我的情況下,我得到的錯誤「oDate.diff不是一個函數」,這裏是我的代碼...

todaysDate = moment(new Date()).format('YYYY, MM, DD'); 
oDate = moment(result.Order.created).format('YYYY, MM, DD'); 
var diffDays = oDate.diff(todaysDate, 'days'); 

我懷疑問題是與大館變量的格式來做。但我無法弄清楚爲什麼。

編輯。順便說一下,我檢查了與console.log todaysDate和oDate的價值,他們是 todaysDate - 2016,09,14 oDate - 2016,09,12

任何意見? 乾杯

回答

4

在做出區別之前請勿使用格式化功能。 。 。一旦你打電話格式化它不會是時刻對象了。格式化函數將其轉換爲字符串。

todaysDate = moment(new Date()); 
oDate = moment(result.Order.created); 
var diffDays = oDate.diff(todaysDate, 'days'); 
+0

我最初嘗試過,但是當我查看Date()和result.Order.created的格式時,它們完全不同。後者是在mySQL數據庫格式這樣「2016-09-12 11:33:40」 –

+0

好吧這工作..謝謝。我不知道爲什麼當我第一次嘗試它時,可能是因爲我昨天凌晨2點編碼。但是,謝謝:) –

0

你可以試試這個:

function showDays(firstDate,secondDate){ 



       var startDay = new Date(firstDate); 
       var endDay = new Date(secondDate); 
       var millisecondsPerDay = 1000 * 60 * 60 * 24; 

       var millisBetween = startDay.getTime() - endDay.getTime(); 
       var days = millisBetween/millisecondsPerDay; 

       // Round down. 
       alert(Math.floor(days)); 

      } 
1

您是否嘗試過這樣的事情?

var startDate = new Date(2008, 01, 12); 
var endDate = new Date(2008, 01, 22); 
var duration = moment.duration(endDate.diff(startDate)); 
var diffDays = duration.asDays(); 

這裏我用moment.duration()diff()得到兩個日期時間之間的間隔,然後asDays()得到的結果在天...

+0

好吧,我只是嘗試使用我的數據這個建議。這是我的代碼\t \t \t \t var startDate = new Date(result.Order.created); \t \t \t \t var endDate = new Date();在console.log中,這兩個日期的格式相同,如下所示:「Wed Sep 14 2016 11:45:37 GMT + 0100(GMT Daylight Time)」我得到這個錯誤:「pos.js:1588 Uncaught TypeError:endDate.diff is不是函數「 –

2

你可能日期轉換爲UNIX時間戳(moment.unix())使用moment.duration()減去兩個時間戳並檢查持續時間,這與您的第一次嘗試相似