我有一个场景,我从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之间进行迭代,看看日期是否有匹配?
如果我的上述想法无法以其他方式发挥作用?
答案 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
中的第二个对象,情况并非如此。
当然,如果要使用它来检查多个日期,可以将此代码包装在函数中。