JSON日期范围来自jQuery日历

时间:2013-05-20 12:41:29

标签: php ajax json

我有一个场景,我从jQuery日历中选择一个日期,然后通过ajax迭代一个JSON文件。我的问题是由于使用日期范围而产生的,例如,请参阅 startdate enddate

    { "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"            
            }
        }]
    }

从上面的代码片段中可以看出,startdate和enddate是一个范围。我想知道尝试从JSON文件内的范围内选择日期的最佳方法是什么。

我考虑过使用PHP explode 来分解传递给ajax的日期,然后通过对爆炸参数和startdate中的数据进行比较来返回到原始页面。结束日期。我想知道是否爆炸了日期,然后在startdate和enddate之间进行迭代,看看日期是否有匹配?

如果我的上述想法无法以其他方式发挥作用?

1 个答案:

答案 0 :(得分: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
}

因此,if语句对于JSON periods数组中的第一个对象是正确的,因为2013-01-04是在2013-01-02和2013-01-06之间(或更多)具体来说,因为时间戳1357279200介于1357106400和1357452000之间。对于periods中的第二个对象,情况并非如此。

当然,如果要使用它来检查多个日期,可以将此代码包装在函数中。