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

あなたの質問には2つの部分があります。配列へのアクセスと日時の解析。

配列アクセスの場合、配列 a の場合、a[0]およびa[a.length-1]はそれぞれ最初と最後です。

バニラ Javascript にはDate.parseメソッドがありますが、それはあまり柔軟ではなく、特定の文字列形式では機能しませんでした。私はMoment.jsのようなライブラリを好むでしょう。解析を行ったら、日付を差し引くことができます (おそらくミリ秒単位の時差?)

于 2012-12-27T14:05:43.617 に答える
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 に答える
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 に答える