2014-04-01 185 views
2

我想從xml中找到最接近的fromdt日期。查找最近的日期(javascript)

<?xml version="1.0" encoding="UTF-8"?> 
    <schedule> 
    <layout fromdt="2014-01-01 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-02-01 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-03-01 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-04-05 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-04-01 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-05-01 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-02-01 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-02-21 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-04-21 00:00:00" todt="2014-01-01 05:30:00"/> 
    <layout fromdt="2014-04-10 00:00:00" todt="2014-01-01 05:30:00"/> 
    </schedule> 

我一直在使用默認的日期格式「週三2013年12月4日14時50分17秒格林尼治標準時間0800(太平洋夏令時)」這正常工作..

var ScheduleDate=[]; 
    XmlResponse=function(xmlHttpRequest, status) 
    { 
     ScheduleDate=[]; 
     $(xmlHttpRequest.responseXML) 
     { 
      var today=new Date(); 
      var xml=xmlHttpRequest.responseXML; 
      $(xml).find("layout").each(function() 
      { 
      var fromDate=new Date($(this).attr('fromdt')); 
      var toDate=new Date($(this).attr('to')); 

      if(toDate>=today) 
      { 
       ScheduleDate.push({"from":fromDate,"to":toDate}); 
      } 

      }); 
     } 
     console.log(ScheduleDate); 
     dateFunction(); 
    } 
    function closestTime(days, testDate,property) 
    { 
     var bestDiff = null; 
     var bestDate = 0; 
     for(i = 0; i < days.length; ++i){ 
      currDiff = days[i][property] - testDate; 
      if((currDiff < bestDiff || bestDiff == null)&& currDiff > 0){ 
       bestDate = days[i][property]; 
       bestDiff = currDiff; 
      } else if (currDiff == bestDiff && days[i][property] > testDate) { 
       //alert(i); 
       bestDiff = currDiff;    
      } 
     } 

     return bestDate; 
    } 
function dateFunction() 
    { 
     var closestFrom=closestTime(ScheduleDate, new Date(),"from"); 

} 

,但是當我嘗試嘗試使用此格式 「YYYY-MM-DD HH:MM:SS」 它返回無效的日期..

var fromDate=new Date("2014-01-01 00:00:00"); 

因此,如何能我藉此INP ut以日期格式或替代方案解決此問題..

+0

這個庫可能有些用處? http://www.datejs.com/ – freefaller

+1

該屬性看起來像'todt',而不是'to'。 – Scimonster

+0

Thanx @freefaller – user

回答

1

2014-01-01 00:00:00不是標準中的有效格式。

我想你使用的是Firefox,new Date("2014-01-01 00:00:00")只適用於V8 JS引擎(Chrome),你可以使用一些替代庫如Moment.js,那麼它可以在所有平臺上運行。

示例。

var fromDate = moment("2014-01-01 00:00:00", "YYYY-MM-DD HH:mm:ss").toDate(); 
+0

時光很棒。 – bitoiu

+0

感謝它解決了我的問題。 – user

0

對於那種格式化日期,您不需要第三方庫。

使用內置函數Date.parse

有些瀏覽器(如Firefox),不支持給定的格式,但可以將其轉換爲ISO-8601)

var datestr = "2014-01-01 00:00:00"; 
var fromDate = new Date(Date.parse(datestr.replace(/ /, "T"))); 

在您的代碼Mozilla的MDN

var datestr = $(this).attr('fromdt'); 
var fromDate = new Date(Date.parse(datestr.replace(/ /, "T"))); 

功能DOC:您可以使用此方法類似https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

+0

這在Firefox中仍然無效。 –

+0

請檢查更新後的答案,轉換爲ISO,'Date.parse()'適用於Firefox以及任何ES5瀏覽器。 – Roberto

+0

更新後的答案有效,我敢肯定,這是我在使用Firefox JS引擎LOL的一個問題。 –

0

你可以使用Date.parse,但這個函數返回在Firefox中NaN,所以你必須手動進行Date,有這樣的事情:

function getDateByString(dateString) { 
    var date = dateString.split(" ")[0] 
    var time = dateString.split(" ")[1] 

    var dd = date.split("-")[0] 
    var mm = date.split("-")[1] 
    var yyyy = date.split("-")[2] 

    var hh = time.split(":")[0] 
    var mi = time.split(":")[1] 
    var ss = time.split(":")[2] 

    return new Date(dd, mm, yyyy, hh, mi, ss); 
} 

Fiddle測試。

+0

謝謝reply.this不工作在Firefox上,它在Chrome中正常工作 – user

+0

看看更新後的答案。 ;) –