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 内のデータを比較して元のページに戻すことを検討しました。日付を爆発させてから、開始日と終了日の間を繰り返して、日付に一致するかどうかを確認するかどうか疑問に思いましたか?

上記のアイデアがうまくいかない場合、他にどのような方法が可能でしょうか?

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
}

したがって、2013-01-04 は 2013-01-02 と 2013-01-06 の間にあるため (具体的には、タイムスタンプ 1357279200 が 1357106400 と 1357452000 の間にあるため)、ifステートメントは JSON 配列の最初のオブジェクトに当てはまります。periodsの 2 番目のオブジェクトには当てはまりませんperiods

もちろん、このコードを使用して複数の日付をチェックする場合は、このコードを関数でラップできます。

于 2013-05-20T12:52:51.773 に答える