我需要在JavaScript中计算两个日期时间之间的持续时间。我试过这段代码:
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = mm+'/'+dd+'/'+yyyy; //Current Date
console.log("current date"+today);
var valuestart ="8:00 AM";
var valuestop = "4:00 PM";//$("select[name='timestop']").val();
//create date format
var timeStart = new Date("01/01/2007 " + valuestart).getHours();
var timeEnd = new Date("01/01/2007 " + valuestop).getHours();
var hourDiff = timeEnd - timeStart;
console.log("duration"+hourDiff);
由此,我可以获得当前日期和持续时间。但是当我用“今天”变量替换日期“01/01/2007”时,我得到的结果是NaN。请指导我在哪里错了。提前谢谢。
答案 0 :(得分:2)
你应该在纪元毫秒上工作。 我们的想法是将所有内容转换为epoch millis representation,执行calculations,然后根据需要返回其他格式。
有很多关于这个主题的文章:
答案 1 :(得分:2)
试试这个:
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = dd+'/'+mm+'/'+yyyy; //Current Date
var valuestart ="8:00 AM";
var valuestop = "4:00 PM";//$("select[name='timestop']").val();
//create date format
var timeStart = new Date(today + " " + valuestart).getHours();
var timeEnd = new Date(today + " " + valuestop).getHours();
var hourDiff = timeEnd - timeStart;
alert("duration:"+hourDiff);
答案 2 :(得分:1)
今天是日期类型,而“01/01/2007”是一个字符串。尝试将Date对象与“8:00 AM”连接起来是行不通的。你必须将今天变量变成一个字符串或使用today.setHours(8)
答案 3 :(得分:0)
也许有点晚了。我附和 Christophe Roussy 的回答。 先计算UTC格式的差,然后转单位-小时。 我认为它更容易理解和维护。 这是代码
var date1 = new Date(`some_valid_start_date_format`);
var date2 = new Date(`some_end_start_date_format`);
var duration = date2.valueOf() - date1.valueOf(); // The unit is millisecond
var hourDiff = parseInt(duration / 60 * 60 * 1000) // Turn the duration into hour format