Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/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中获取日期/时间差_Javascript_Php_Mysql - Fatal编程技术网

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

如何使用给定的日期/时间在javascript中获取日期/时间差,javascript,php,mysql,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 Seco

我使用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代码

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

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

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

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); 
您可以在中查看更多详细信息

您可以将日期时间设置为

var t1 = new Date(2014, 1, 21, 13, 50, 20, 123);
Xotic750补充了一个非常好的观点:


根据您使用的浏览器的不同,该日期可能不支持ISO8601解析。需要与ECMA5兼容的浏览器。即使如此,有些支持空间“”日期/时间delimeter,有些则需要“T”


问题是您正在尝试减去两个datetime对象。这些不是整数,你不能用这种方法计算它们。但是,以下链接将为您指引正确的方向:

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

他的将以毫秒为单位显示两个日期之间的差异

var diff=Math.absdate1-date2

在你的例子中,应该是

var diff = Math.abs(new Date() - compareDate);
您需要确保compareDate是有效的日期对象

像这样的东西可能对你有用

var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/')));
i、 e.将2011-02-07 15:13:06转换为新日期的2011/02/07 15:13:06',这是日期构造函数可以理解的格式


使用图书馆让你的生活更轻松-

例如:

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

如果dateString的格式始终相同,则无需加载jQuery和moments库即可自行完成。我假设您的时间戳是UTC,ISO8601会假设它是本地的,不同的浏览器和库在这一点上也不一致。这应该可以跨浏览器工作

MDN是一个比W3学校更好的参考

HTML


上,您可以对代码进行Date.parse并稍微缩短。根据您使用的浏览器的不同,该日期可能不支持ISO8601解析。需要与ECMA5兼容的浏览器。即使如此,有些支持空格“”日期/时间delimeter,有些则要求日期对象初始化“T”无误,但这取决于他/她使用的浏览器是否支持解析ISO8601 DateStrings如果date对象不支持所有浏览器版本,那么这不是问题所在吗?Javascript中的日期解析是一个非常偶然的事件,早在ECMA5添加ISO8601支持之前,请看一下这一点。因此,在可能的情况下,更多的是避免Date.parse,或者自己执行,或者使用库来规范化功能。getTime将Date对象转换为一个数值整数,该整数表示自1970年1月1日00:00:00 UTC以来以毫秒为单位的时间,因此应用这些数字没有任何问题,正如OP所做的,非常正确。接得好+1为什么这是一个问题,意味着我需要使用一些库?如何使我的生活更容易使用它?您能举一个例子说明如何通过使用该库来实现所尝试的功能吗?可能是JSFIDLE?浏览器兼容性,简化了复杂的操作,等等。类似于为什么jQuery和其他JS框架,为什么不是纯Javasript谢谢大家,这个对我来说很好用。函数parseMyDateString{var parts=dateString.split/[\-:\.]/g;parts[1]=1;返回新的DateDate.UTC.applyundefined,parts.getTime;}document.getElementByIdTDIFF_IN_SECONDS.value=Math.absparseMyDate'2014-01-21 13:50:20.123'-parseMyDate'2014-01-21 12:50:20.123'/1000;
$( 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);    
});
<input type="text" id="TDIFF_IN_SECONDS" />
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;