减去数组javascript的第一个和最后一个日期时间

subtract first and last datetime of an array javascript

本文关键字:最后一个 日期 时间 第一个 数组 javascript      更新时间:2023-09-26

我需要减去从XML文件中获得的数组的第一个和最后一个元素(日期)。

字符串的格式如下:

 27/12/2012 13:09:15
 27/12/2012 13:40:47
 27/12/2012 14:56:43
有人知道怎么做减法吗?

致以最诚挚的问候

我的功能是:

 function recorrido() {
 downloadUrl("dates.asp", function(data) {
    var xml = xmlParse(data);
    var markersPath = xml.documentElement.getElementsByTagName("marker");   
    var path = [];

    for (var i = 0; i < markersPath.length; i++) {
    var lat = parseFloat(markersPath[i].getAttribute("lat"));
    var lng = parseFloat(markersPath[i].getAttribute("lng"));
    var timestamp= markersPath[i].getAttribute("timestamp");
    var time = 0;
    time+= Math.abs(timestamp[0]) - Math.abs(timestamp[timestamp.length-1]);
}//finish loop
alert(time);
alert(timestamp[0]);
alert(timestamp[timestamp.length-1]);


}); //end download url
}//end function

和动态加载的XML是这个:

<markers>
<marker id="1" lat="37.1914496222793" lng="-3.72511240175617" timestamp="27/12/2012 16:37:03"/>
<marker id="2" lat="37.1914401951048" lng="-3.72517991386109" timestamp="27/12/2012 16:37:05"/>
<marker id="3" lat="37.1914308368611" lng="-3.72523615956726" timestamp="27/12/2012 16:37:07"/>
<marker id="4" lat="37.1914216855078" lng="-3.72525860611944" timestamp="27/12/2012 16:37:09"/>
<marker id="5" lat="37.1913854939084" lng="-3.72528079402709" timestamp="27/12/2012 16:42:38"/>
<marker id="6" lat="37.191367191181" lng="-3.72532568708827" timestamp="27/12/2012 16:42:40"/>
</markers>

所以我想要得到的是车辆行驶的时间

你的问题分为两部分。数组访问和日期时间解析。

对于数组访问,对于数组a, a[0]a[a.length-1]分别是第一个和最后一个。

香草Javascript有一个Date.parse方法,但这不是很灵活,不适合你的特定字符串格式。我更喜欢像Moment.js这样的库。完成解析后,可以减去日期(大概是毫秒?)

我会将日期转换为毫秒,然后相减得到差值。

例如:

<script>
var date1 = getTimeInMillisecond('27/12/2012 13:09:15');
alert("Date 1: "+date1.getTime());
var date2 = getTimeInMillisecond('27/12/2012 14:56:43');
alert("Date 2: "+date2.getTime());
var diff = date2-date1;
alert(diff/1000 + " seconds");
alert(diff/1000/60 + " minutes");
alert(diff/1000/60/60 + " hours");
function getTimeInMillisecond(timeString) {
    var time1 = '27/12/2012 13:09:15';
    // create date object for time 1
    var dateInfo = timeString.match(/('d+)'/('d+)'/('d+) ('d+):('d+):('d+)/);
    return new Date(dateInfo[3],dateInfo[2]-1,dateInfo[1],dateInfo[4],dateInfo[5],dateInfo[6]);
}
</script>

希望这就是你想要达到的目标。

转换为毫秒,然后计算差值:

a=['27/12/2012 13:09:15','27/12/2012 13:40:47','27/12/2012 14:56:43'];
alert(arrayDateSpan(a));
function dateToMilisec(str){
    var d=str.match(/(['d]{2})'/(['d]{2})'/(['d]{4}) (['d]{2}):(['d]{2}):(['d]{2})/i)
    var date=new Date(d[3],d[2],d[1],d[4],d[5],d[6],0);
    return date.getTime();
}
function milisecToDays(unixmilisec){
    var unix=unixmilisec/1000;
    var day=60*60*24;
    var dayrest=unix%day;
    var days=(unix-dayrest)/day;
    var hourrest = dayrest%(60*60);
    var hours= (dayrest-hourrest)/(60*60);
    var minuterest = hourrest%60;
    var minutes=(hourrest-minuterest)/60;
    var seconds=minuterest;
    return days+' Days '+hours+':'+minutes+':'+seconds;
}
function arrayDateSpan(array){
    diff=dateToMilisec(array[array.length-1])-dateToMilisec(array[0]);
    return milisecToDays(diff);
}