1

重複の可能性:
日付の配列から最新の日付を取得する方法は?

私は配列である時刻表を持っています:

array(
    '01.01.2012|11:00',
    '01.01.2012|14:30',
    '01.01.2012|16:24', // example match
    '01.01.2012|17:20',
    '01.01.2012|17:43',
    '02.01.2012|10:20',
    '02.01.2012|12:30',
); // etc.

現在の日付/時刻をチェックし、配列内のものと比較する Cron ジョブが必要です。まず、日付が一致しているかどうかを確認しますが、問題ありません。しかし、その配列から現​​在時刻より後の最も早い時刻を見つけて表示する必要があります。同じ日付内に適切な時間がない場合は、次の日付から最も早い時間を表示します。

例:上記の配列と現在の日付/時刻を取りましょう01.01.2012|14:45

  • 日付が一致したので続行します
  • 次回は16:24の配列からですが、PHPを使ってどうやって探すのでしょうか?そして、現在の時刻が配列内の同じ日付の何よりも大きい場合、次の日付から最も早い時刻を取得しますか?

明らかに、正しい日付の文字列を取得するために、「foreach」と「if」を使用すると、正常に返されます。でも、どうやって時代を乗り切ればいいの?

4

4 に答える 4

2

タイムスタンプに変換し並べ替えて、現在の時刻と繰り返し比較します。

$ts = array_map(
        create_function('$a','return strtotime(str_replace("|", " ", $a));'), 
        $dates);
$len= count($ts); $now = time();
sort($ts); 
for($i=0;$i<$len && (!($now<$ts[$i]));$i++);
echo date("d.m.Y|H:i",$ts[$i]);

関心のある機能

于 2012-06-26T12:04:20.303 に答える
0

参照日以上の日付が見つかるまでループする日時形式の比較関数を記述します。

function compareDateTime($dt1, $dt2) {
   sscanf($dt1, "%d.%d.%d|%d:%d", $day, $month, $year, $hour, $minute);
   $comp1 = $year . $month . $day . $hour . $minute;
   sscanf($dt1, "%d.%d.%d|%d:%d", $day, $month, $year, $hour, $minute);
   $comp2 = $year . $month . $day . $hour . $minute;

   return $comp1 - $comp2;
}

$ dt1 <$dt2の場合は-veを返し、$ dt1>$dt2の場合は+veを返します

于 2012-06-26T11:31:42.693 に答える
0

これらを UNIX タイムスタンプに変換すると、それらを数値順にソートし、ループして、現在のタイムスタンプよりも大きい最初の項目を取得できます。

于 2012-06-26T11:20:06.823 に答える
0

これらの日付を UNIX タイムスタンプに変換することを検討してください。

function getUnixTimestamp($string) {
    list($date, $time) = explode('|', $string);
    return strtotime("$date $time");
}

次に、次のようなものを使用できます。

$array = array(); // from example
$timestamps = array_map('getUnixTimestamp', $array);
$current = time();

// create an array mapping timestamp to string
$keyedArray = array_combine($timestamps, $array);

// sort by timestamp
ksort($keyedArray);

foreach ($keyedArray as $timestamp => $string) {
    if ($timestamp > $current) {
        // this is the first timestamp after current time
    }
}

$timestampで追加のチェックを行い、同じ日または翌日であることを確認したい場合がありますが、文字列の一致よりもタイムスタンプの比較を使用する方が簡単です。

于 2012-06-26T11:25:24.207 に答える