1

我有一个场景,我从 jQuery 日历中选择一个日期,然后通过 ajax 遍历 JSON 文件。我的问题是由于使用了日期范围而出现的,例如,请参阅startdateenddate

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

1 回答 1

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语句适用于 JSONperiods数组中的第一个对象,因为 2013-01-04 介于 2013-01-02 和 2013-01-06 之间(或者更具体地说,因为时间戳 1357279200 介于 1357106400 和 1357452000 之间)。中的第二个对象不是这样periods

当然,如果你想用它来检查多个日期,你可以将这段代码包装在一个函数中。

于 2013-05-20T12:52:51.773 回答