如何使用给定的日期/时间在javascript中获取日期/时间差异

时间:2014-01-23 15:15:38

标签: javascript php mysql

我使用XML从MySQL数据库中抓取了两个日期,如下所示。我想在几秒钟内获得时差。

我写了这个脚本,但它给出了“NaN”

<script type="text/javascript">
function show(){
var t1 = new Date("2014-01-21 13:50:20.123");
var t2 = new Date("2014-01-21 12:50:20.123");
var dif = t1.getTime() - t2.getTime()

var Seconds_from_T1_to_T2 = dif / 1000;
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);

document.getElementById("TDIFF_IN_SECONDS").value=Seconds_Between_Dates;
}
</script>

HTML CODE

<body onload="show()">
<input type="text" id="TDIFF_IN_SECONDS" />
</body>

如果有人知道,请帮助我......

4 个答案:

答案 0 :(得分:0)

您正在使用的浏览器不支持您的日期对象初始化。

var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); 

您可以在http://www.w3schools.com/jsref/jsref_obj_date.asp

中查看更多详情

您可以将日期时间设置为

var t1 = new Date(2014, 1, 21, 13, 50, 20, 123);

Xotic750增加了一个非常好的观点:

  

根据您使用此浏览器的情况,可能是Date不支持ISO8601解析。需要兼容ECMA5的浏览器。即使这样,一些人也支持空间的日期/时间范围,有些人需要'T'

答案 1 :(得分:0)

如果您的dateString格式始终相同,那么您可以自己完成,而无需加载jQuery和时刻库。我假设你的时间戳是UTC,ISO8601会认为它是本地的(不同的浏览器和库在这一点上也不同意)。这应该适用于各种浏览器。

MDN是Date比w3schools更好的参考。

HTML

<input type="text" id="TDIFF_IN_SECONDS" />

的Javascript

function parseMyDate(dateString) {
    var parts = dateString.split(/[ \-:\.]/g);

    parts[1] -= 1;
    return new Date(Date.UTC.apply(undefined, parts)).getTime();
}

document.getElementById("TDIFF_IN_SECONDS").value = Math.abs(parseMyDate('2014-01-21 13:50:20.123') - 
                                                              parseMyDate('2014-01-21 12:50:20.123')) / 1000;

jsFiddle

答案 2 :(得分:-1)

问题是您正在尝试减去两个日期时间对象。这些不是整数,你不能用这种方式对它们进行数学计算。但是,以下链接将指导您正确的方向:Link

其中,David Hedlund发表了以下文章:

  

“他会告诉你两个日期之间的差异,以毫秒为单位

     

var diff = Math.abs(date1 - date2);

     

在你的例子中,它是

var diff = Math.abs(new Date() - compareDate);
     

您需要确保compareDate是一个有效的Date对象。

     

这样的事可能对你有用

var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/')));
     

即。将"2011-02-07 15:13:06"转换为新的Date('2011/02/07 15:13:06'),这是Date构造函数可以理解的格式。“

答案 3 :(得分:-1)

使用图书馆让您的生活更轻松 - http://momentjs.com/

示例:http://jsfiddle.net/c6sYz/

需要:jQuery&amp; momentjs。如果您不使用jQuery,可以使用onload将其更改为纯JS。

$( document ).ready(function() {
    var t1 = moment("2014-01-21 13:50:20.123", "YYYY-MM-DD HH:mm:ss.sss");

    var t2 = moment("2014-01-21 12:50:20.123", "YYYY-MM-DD HH:mm:ss.sss");

    var diff = t1.diff(t2, 'seconds');

    $("#diff").val(diff);    
});