2014-04-01 137 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

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