0

日付の比較に問題があります。API を介してデータベースから 1 つの日付を取得します。これらの日付は配列に格納されます。これは、1 つの列に複数の日付が含まれており、それらを循環して次の日付を見つける必要があるためです。日付の形式は「dd/mm/yy」です。

$rawDate = $e->calendarsummary;
$filter = preg_replace("/[a-z]/","", $rawDate);
$createArray = explode(',', $filter);
$dates = array_filter(array_map('trim', $createArray));
foreach($dates as $d)
{
     $dateTime = DateTime::createFromFormat('dmy', $d);
     if($dateTime >= $now)
     {
          $finalDate = $dateTime;
          $total = $finalDate->format('l j/m/y');
          break;
     }
}

$dateTime = DateTime::createFromFormat('dmy', $d);「false」を返した後に $dateTime の var_export を配置すると。したがって、配列 $dates は正しく入力されていますが、 $dateTime は空であると推測しています。

$dates の var_export は以下を返します:

配列 ( 0 => '15/06/13', 1 => '16/06/13', )

$now の var export は今日の日付を返します: '16/06/13'

変数 $DateTime が空のままなのはなぜですか?

編集:どうやら「false」の戻り値はエラーであることを意味するため、配列から日付をフォーマットするときに何か問題が発生しましたか?

4

4 に答える 4

0
$dateTime = DateTime::createFromFormat('d/m/y', $d);

いいえ

$dateTime = DateTime::createFromFormat('dmy', $d);
于 2013-06-16T17:17:51.603 に答える
0

日付の形式は でありd/m/y、 ではありませんdmy。代わりに次のことを試してください。

$dateTime = DateTime::createFromFormat('d/m/y', $d);

これを行うと、次のようになります。

class DateTime#1 (3) { public $date => string(19) "2013-06-15 17:17:12" public $timezone_type => int(3) public $timezone => string(3) "UTC" }

...代わりにbool(false)

于 2013-06-16T17:18:02.710 に答える
0

$dates配列にそのような要素が含まれている場合は、15/06/13間違った日付形式を使用してください。例えば:

$dateTime = DateTime::createFromFormat('d/m/y', $d);
于 2013-06-16T17:18:11.910 に答える
0

別の方法としてstrtotimeを使用できます。

$now = date('d/m/y');

foreach($dates as $d)
{

if(strtotime($d) >= strtotime($now))
{

       $finalDate = $dateTime;
       $total = date('l j/m/y', strtotime($d));
       break;
    }

}
于 2013-06-16T17:28:52.710 に答える