在javascript中计算两个日期时间之间的持续时间
Posted
技术标签:
【中文标题】在javascript中计算两个日期时间之间的持续时间【英文标题】:Calculate duration between two date times in javascript 【发布时间】:2014-02-28 13:08:03 【问题描述】:我需要计算 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);
由此,我可以获得当前日期和持续时间。但是当我用变量“today”替换日期“01/01/2007”时,我得到的结果是 NaN。请指导我哪里错了。提前致谢。
【问题讨论】:
您确定timeStart
和timeEnd
是有效日期吗?
向我们展示无效的代码。现在“今天”是一个日期对象
它在上面的代码中是正确的。但是当我把它改成 var timeStart=new Date(""+today+""+valuestart+"").getHours();和类似的时间结束,我遇到了问题
【参考方案1】:
您应该以纪元毫秒为单位工作。 想法是将所有内容转换为epoch millis representation,执行您的calculations,然后在需要时返回另一种格式。
关于这个主题的文章很多:
Get the time difference between two datetimes http://www.htmlgoodies.com/html5/javascript/calculating-the-difference-between-two-dates-in-javascript.html#fbid=AojoSIQKaAL【讨论】:
【参考方案2】:today 是 Date 类型,而“01/01/2007”是一个字符串。尝试将 Date 对象与“8:00 AM”连接起来是行不通的。您必须将 today 变量转换为字符串或使用 today.setHours(8)
【讨论】:
如何将日期类型转换为字符串 如果你有 jQuery,那就很容易了。 $.datepicker.formatDate('mm/dd/yyyy', 今天); 如果您没有 jQuery,您可能必须使用 Date 对象的内置方法来构建字符串:(today.getMonth() + 1) + '/' + today .getDate() + '/' + today.getFullYear()。类似的东西。 不,我不想使用 datepicker。我会从服务器获取时间【参考方案3】:试试这个:
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);
【讨论】:
【参考方案4】:也许有点晚了。我赞同 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
【讨论】:
认为您需要一些括号围绕该持续时间线:parseInt(duration / (60 * 60 * 1000))
好的,已编辑,谢谢正确性
感谢您的回答!简洁明了,我在我的程序中使用了它:-)以上是关于在javascript中计算两个日期时间之间的持续时间的主要内容,如果未能解决你的问题,请参考以下文章