0

我需要减去我从 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>

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

4

3 回答 3

2

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

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

Vanilla Javascript 有一个Date.parse方法,但它不是很灵活,并且不适用于您的特定字符串格式。我更喜欢像Moment.js这样的库。完成解析后,您可以减去日期(大概以毫秒为单位的时间差?)

于 2012-12-27T14:05:43.617 回答
0

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

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);
}
于 2012-12-27T14:54:50.397 回答
0

我会将日期转换为毫秒,然后减去它以获得差异。

例如:

<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>

希望这就是您要实现的目标。

于 2012-12-27T14:28:35.610 回答