Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript,如何在mysql时间戳样式中找到两个日期时间之间的差异_Javascript_Datetime_Timestamp - Fatal编程技术网

Javascript,如何在mysql时间戳样式中找到两个日期时间之间的差异

Javascript,如何在mysql时间戳样式中找到两个日期时间之间的差异,javascript,datetime,timestamp,Javascript,Datetime,Timestamp,假设我有 a = "2011-11-09 08:00:00" b = "2011-11-10 08:30:00" 用Javascript计算这两个时间戳之间的差异的最佳方法是什么 因此,输出应为“1天”(忽略分钟,因为差异中有更大的单位(天))编辑后可在任何浏览器中工作 var matchDate = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/; var firstDateParsed = matchDate.exec("2011-11-

假设我有

a = "2011-11-09 08:00:00"
b = "2011-11-10 08:30:00"
用Javascript计算这两个时间戳之间的差异的最佳方法是什么


因此,输出应为“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中测试:

在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中的毫秒)的简单问题。您需要确认与此相关的业务逻辑。

您必须自己将时间戳解析为日期:

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);
简单的算术可以让你将毫秒转换成秒、分钟或其他任何形式


顺便说一下,如果传入的时间戳与表达式不匹配,此函数将抛出错误。从软件设计的角度来看,这种行为对我来说是有意义的。但是,如果您希望能够对格式不正确的字符串使用该函数,您可以对
部分执行null检查,如果不匹配,则返回null。

在Firefox的第一行失败,IE-a不是有效日期或NaN(分别)。这在所有浏览器中都不起作用。值得注意的是,IE给出了一个“无效日期”错误。不幸的是,ECMAScript规范将解析日期背后的逻辑留给了各个实现者,因此在解析浏览器之间的日期时存在不一致性。谢谢你,Milimetric,这是我的尝试,因为其他人提到它只在chrome中对我有效。啊,是的,chrome只是很遗憾。嗯,我不认为解析是问题的关键部分,但让我们看看我是否能编造一些东西