假设我有
a = "2011-11-09 08:00:00"
b = "2011-11-10 08:30:00"
在Javascript中找出这两个时间戳之间差异的天数,小时数和分钟数的最佳方法是什么?
所以输出应该是“1天”(忽略分钟,因为差异中有更大的单位(天))?
答案 0 :(得分:2)
将字符串转换为javascript中日期的唯一可靠方法是手动解析它。如果格式与您发布的内容一致,则可以将其转换为日期,如下所示:
function stringToDate(s) {
var dateParts = s.split(' ')[0].split('-');
var timeParts = s.split(' ')[1].split(':');
var d = new Date(dateParts[0], --dateParts[1], dateParts[2]);
d.setHours(timeParts[0], timeParts[1], timeParts[2])
return d
}
所以你可以这样做:
var a = "2011-11-09 08:00:00"
var b = "2011-11-10 08:30:00"
alert(stringToDate(a) - stringToDate(b));
以毫秒为单位获得差异。但是,两个日期之间的天数差异可能不是将差异除以8.64e7(一个da中的毫秒)的简单问题。您需要确认与此相关的业务逻辑。
答案 1 :(得分:1)
已编辑以在任何浏览器中使用
var matchDate = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var firstDateParsed = matchDate.exec("2011-11-09 08:00:00");
var secondDateParsed = matchDate.exec("2011-11-10 08:30:00");
var a = new Date(firstDateParsed[1], firstDateParsed[2], firstDateParsed[3], firstDateParsed[4], firstDateParsed[5], firstDateParsed[6], 0);
var b = new Date(secondDateParsed[1], secondDateParsed[2], secondDateParsed[3], secondDateParsed[4], secondDateParsed[5], secondDateParsed[6], 0);
var differenceInMilliseconds = a.getTime() - b.getTime();
// minutes
alert(differenceInMilliseconds / 1000 / 60);
// hours
alert(differenceInMilliseconds / 1000 / 60 / 60);
// days
alert(differenceInMilliseconds / 1000 / 60 / 60 / 24);
在IE和Firefox以及Chrome中进行了测试:http://jsfiddle.net/xkBTS/4/
答案 2 :(得分:0)
您必须自己将时间戳解析为日期:
function parseMySQLTimestamp(timestamp) {
var parts = timestamp.match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/);
return new Date(+parts[1], (+parts[2] - 1), +parts[3], +parts[4], +parts[5], +parts[6]);
}
通过从另一个日期中减去一个日期来获得以毫秒为单位的差异:
var msDifference = parseMySQLTimestamp(b) - parseMySQLTimestamp(a);
简单算术可以让你将毫秒转换为秒,分钟或其他任何内容。
顺便说一下,如果传入的时间戳与表达式不匹配,则此函数将抛出错误。从软件设计的角度来看,这种行为对我来说很有意义。但是,如果您希望能够将该函数用于可能格式不正确的字符串,则可以对parts
执行空检查,如果没有匹配则返回null。