2015-04-29 54 views
0

我有一個開始日期這樣的:的Javascript:時間除了

var beginDate = "29/04/2015"; 
var beginHour = "13:32"; 

我有一些時間變量:

var hourDuration = "2"; 
var minuteDuration = "10"; 

我要計算結束日期

我的例子,我試圖得到:

var endDate = "29/04/2015"; 
var endHour = "15:42"; 

但是,如果用戶在持續時間內設置了長時間的時間,endDate必須考慮到結束將是另一天。

JavaScript有計算這個時間的方法嗎?

+0

JavaScript有一個'Date'類型。不要自己做。 – maja

回答

0

Javascript內置Date對象,可以解析RFC2822兼容的日期字符串。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

但是,您的字符串不符合RFC2822規範(沒有事先更改)。

因此,我會推薦你​​使用momentjs。這是一個非常方便的日期/時間操作庫。例如,要在給定的日期添加兩個小時,您可以鍵入。

var timeString = '29/04/2015 13:32'; 
var time = moment(timeString, 'mm/dd/yyyy hh:ss').add(2, 'hour'); 
console.log(time.format('mm/dd/yyyy hh:ss')); 

http://momentjs.com/docs/

0

您可以使用內置的Date類型從JavaScript:

var date= new Date(2015, 04, 29, 13, 32, 0); 
date.setHours(beginDate.getHours()+2); 
date.setMinutes(beginDate.getMinutes()+10); 

alert(date.getDate() + '/' + date.getMonth() + 1 + '/' + date.getFullYear() + 
     " " + date.getHours() + ":" + date.getMinutes()); 
2

沒有任何庫,這將是這樣的:

var beginDate = "29/04/2015"; 
 
var beginHour = "13:32"; 
 

 
var hourDuration = "2"; 
 
var minuteDuration = "10"; 
 

 
var date = beginDate.split('/'), time = beginHour.split(':'); 
 
date = new Date(date[2], date[1] - 1, date[0], time[0], time[1]); 
 
var newDate = new Date(+date + (hourDuration * 60 + +minuteDuration) * 60000); 
 

 
var endDate = newDate.getDate() + '/' + (newDate.getMonth() + 1) + '/' + newDate.getFullYear(); 
 
var endHour = newDate.getHours() + ':' + newDate.getMinutes(); 
 

 
alert(endDate + ' ' + endHour);

但我會推薦使用momentjs

+0

非常感謝。你解決了我痛苦的「玩」時間! – Sergey

1

要真正準確地使用Javascript中的「Date」對象。小心它知道當地的時區。下面的腳本顯示17:42,而不是15:42,如果你在GMT + 2(像我:))。

var beginDate = "29/04/2015"; 
 
var beginHour = "13:32"; 
 

 
var dateo = new Date(beginDate.split("/").reverse().join("-") + "T" + beginHour + ":00"); 
 

 
var hourDuration = "2"; 
 
var minuteDuration = "10"; 
 

 
var enddate = new Date(dateo.getTime() + (hourDuration * 3600000) + (minuteDuration * 60000)); 
 

 
alert(enddate);