【问题标题】:Difference Between Datetimes日期时间之间的差异
【发布时间】:2012-02-04 10:16:33
【问题描述】:

我这里有一些代码可以计算两个日期时间之间的小时差。这里有点不知所措。代码被击中或错过,我不知道为什么。

var date = tr.find('td:eq(10) input').val();
var time = tr.find('td:eq(10) option:selected').val();
var d1 = parseDate(date,time);
date = tr.find('td:eq(11) input').val();
time = tr.find('td:eq(11) option:selected').val();
var d2 = parseDate(date,time);
var diff = d2.getTime() - d1.getTime();
var hoursTd = tr.find('td:eq(12)');
hoursTd.html((diff/3600000).toFixed(2));

datetime 已正确填充,从 jQuery UI 日期选择器和一个简单的下拉列表中提取,值为下午 2:30、下午 2:45、下午 3:00 等。当日期为相同,但有时在日期不同时会增加十个数量级。例如:

2011 年 1 月 11 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 0.50(正确)

2011 年 1 月 10 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 24.50(正确)

2011 年 1 月 9 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 264.50(不正确)

2011 年 1 月 8 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 264.50(不正确)

2011 年 1 月 7 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 96.50(正确)

编辑,哦,天哪,我很抱歉。不包含 parseDate 函数。

// Date m/d/Y Time h:m a
function parseDate(date,time) {

date = date.split("/");
time = time.split(" ");
hm = time[0].split(':');
if (parseInt(hm[0]) == 12) {
    hm[0] = 0;
}
if (time[1] == 'pm') {
    hm[0] = parseInt(hm[0]) + 12;
} else {
    hm[0] = parseInt(hm[0]);
}
return new Date(
    parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]),
    hm[0], parseInt(hm[1])
);
}

编辑,好的,所以parseInt 是罪魁祸首。 parseInt("09") 返回 0。"08" 也是如此。奇怪的是,parseInt("07") 返回 7。而 1-6 也正确返回。有人告诉Javascript。

【问题讨论】:

  • 提及包含所有函数定义的完整代码...
  • 进行更多调试:显示/警报/记录 d1 和 d2 的值,以便确保正确读取输入设置。此外,您可能需要确保 diff 是一个正数。
  • 也许这可以帮助你 - stackoverflow.com/questions/1576753/…
  • 看看 date.js 库。好用!
  • 最好发布一个展示该行为的示例页面。我会做控制台输出,以确保您的 parseDate 方法获得正确的 d1/d2 值。

标签: javascript


【解决方案1】:

date.js 解决了你的问题:

var first = Date.parse(01/09/2011 10:30 am);
var second = Date.parse(01/11/2011 11:00 am);
var diffMs = Math.abs(first - second) // difference in milliseconds

【讨论】:

    【解决方案2】:

    问题是您在 date[1] 上的 parseInt() 使用了前导零。

    return new Date(
        parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]),
        hm[0], parseInt(hm[1])
    );
    

    当您传递像 01/09/2011 这样的日期时,09 被解析为 0,而不是 9。

    【讨论】:

    • 我认为你可能是对的。但是你会怎么解释呢? 2010 年 6 月 9 日上午 11:30 -- 2010 年 5 月 31 日星期一 11:30:00 GMT-0400 (EDT),2010 年 6 月 7 日上午 11:30 -- 2010 年 6 月 7 日星期一 11:30:00 GMT-0400 (EDT) 我不能格式化 cmets 吗?无论如何,它会错误地解析 09 但正确地解析 07?
    • 哇,这很有趣。 parseInt("09") 返回 0 但 parseInt("07") 返回 7。
    • 更改您的 parseInts 以指定基数。例如。 parseInt(date[1],10) 更多信息请参见developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2021-10-19
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多