2014-09-21 135 views
0

尝试将此功能从Get difference between 2 dates in javascript?更改为以小时而不是天为单位返回差异,但目前为止没有运气。 =)获取两个日期对象之间的小时差异?

function dateDiffInDays(scheduled, due) { 
    var _MS_PER_DAY = 1000 * 60 * 60 * 24; 
    var scheduled = new Date(scheduled); 
    var due = new Date(due); 
    var utc1 = Date.UTC(scheduled.getFullYear(), scheduled.getMonth(), scheduled.getDate()); 
    var utc2 = Date.UTC(due.getFullYear(), due.getMonth(), due.getDate()); 
    return Math.floor((utc2 - utc1)/_MS_PER_DAY); 
} 

改变_MS_PER_DAY1000 * 60 * 60,但它不会工作返回零。请帮忙。

编辑: “2014年9月21日上午09:00:00”

+0

* utc1和utc2的值是什么?如果返回0,那么utc1和utc2都表示*相同的*日(并且当天的同一小时)。 – user2864740 2014-09-21 05:46:11

+0

这是不正确的(-1和一个关闭的投票不包括* real * ** utc1 **和** utc2 **值)。再试一次 - 我可以说这是不准确的,因为小时数*不会转移到'Date.UTC'函数调用。 – user2864740 2014-09-21 05:47:54

+0

再次,'utc1'和'utc2'的* actual *值从那里开始。然后问题和解决方案,包括复制相关的精度,将变得明显。此外,复制哪些字段(以及是否应该创建新的Date对象)取决于*应该使用什么规则 - 例如, 9点05分之后还有10点55分是“一小时”吗? – user2864740 2014-09-21 05:53:33

回答

1

在你的问题,这些线:

var utc1 = Date.UTC(scheduled.getFullYear(), scheduled.getMonth(), scheduled.getDate()); 
var utc2 = Date.UTC(due.getFullYear(), due.getMonth(), due.getDate()); 

磨砂小时/这种格式的时间表和应有的价值分钟/等。来自日期的信息,所以如果两个日期在同一天,那么结果将始终为零。

一个更简单的功能,可用于获取时间差(以十进制数):如果你想为一个圆角/地板INT

function dateDiffInHours(date1, date2) { 
    var msDiff = date2.getTime() - date1.getTime(); 
    return msDiff/3600000; 
} 

或者,然后应用Math.round()Math.floor()到返回结果。

根本不需要转换为UTC。

+0

'function dateDiffInHours(scheduled,due){ var scheduled = new Date(scheduled); var due = new日期(到期); var msDiff =(due.getTime() - scheduled.getTime())/ 3600000; return msDiff.toFixed(2); }' – 2014-09-21 06:07:22