2013-05-20 143 views
1

我有一個場景,我從jQuery日曆中選擇一個日期,然後通過ajax迭代JSON文件。我的問題的出現是由於使用日期範圍,例如,見STARTDATE結束日期JSON日期範圍從jQuery日曆

{ "campus" : "A", "periods": [ 
    { "startdate" : "2013-01-02", 
     "enddate" : "2013-01-06", 
     "labels" : [ 
     { "Wednesday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Thursday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Friday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Saturday": 
      { "00:00" : "Closed"    
      }, 
      "Sunday": 
      { "00:00" : "Closed"    
      } 
     }] 
    }, 
    { "startdate" : "2013-01-07", 
     "enddate" : "2013-03-24", 
     "labels" : [ 
     { "Monday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Tuesday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Wednesday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Thursday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Friday": 
      { "00:00" : "Closed", 
       "09:00" : "Open", 
       "18:00" : "Closed" 
      }, 
      "Saturday": 
      { "00:00" : "Closed"    
      }, 
      "Sunday": 
      { "00:00" : "Closed"    
      } 
     }] 
    } 

正如你可以從代碼段見上面,起始日期和結束日期是一個範圍。我想知道最好的方法是嘗試從JSON文件內的範圍內選擇一個日期。

我曾考慮使用PHP 爆炸來分解傳遞給ajax的日期,然後通過比較分解參數和startdate和enddate內的數據返回到原始頁面。我想知道是否爆炸日期,然後在startdate和enddate之間迭代以查看日期是否匹配會起作用?

如果我的上述想法不起作用,其他方式將是可能的?

回答

4

爲什麼你不試試你的想法?這聽起來像一個好的開始。但您可以通過不使用explode節省一些努力。 PHP有一些有用的內置日期/時間函數,特別是strtotime,它將字符串日期(實際上任何格式)轉換爲Unix時間戳。這只是一個很容易與其他時間戳比較的整數。請看:

$startdate;  #read this in from the json, contains e.g. '2013-01-02' 
$enddate;   #read this in from the json, contains e.g. '2013-01-06' 

#we want to check if this date is within the range 
$datetomatch = '2013-01-04'; 

#get integer timestamps for each date 
$starttime = strtotime($startdate); 
$endtime = strtotime($enddate); 
$matchtime = strtotime($datetomatch); 

#check if $matchtime is within the range 
if($matchtime >= $starttime && $matchtime <= $endtime) { 
    #datetomatch is between $startdate and $enddate 
} 

如此,因爲2013年1月4日是2013年1月2日和2013年1月6日(或更多的if聲明將是你的JSON periods數組的第一個對象真具體而言,因爲時間戳1357279200介於1357106400和1357452000之間)。對於periods中的第二個對象不是這樣。

當然,如果您想使用它來檢查多個日期,您可以將此代碼封裝在一個函數中。

+1

歡呼聲! –