0

私は次のコードを持っています:

$posted_on = new DateTime($date_started);
$today = new DateTime('today');
$yesterday = new DateTime('yesterday');
$myFormat = 'format(\'Y-m-d\')';

if($posted_on->{$myFormat} == $today->{$myFormat}) {
    $post_date = 'Today';
}
elseif($posted_on->{$myFormat} == $yesterday->{$myFormat}) {
    $post_date = 'Yesterday';
}
else{
    $post_date = $posted_on->format('F jS, Y');
}

echo 'Started '.$post_date;

ご覧のとおり、「format('Ymd')」を何度も使用しようとしていて、複数の場所に入力したくないので、単純に変数に入れて使用しようとしています。ただし、次の通知が表示されます。メッセージ:未定義のプロパティ:DateTime :: $ format('Ymd')

これを行うための正しい方法は何でしょうか?

4

3 に答える 3

5
$myFormat = 'Y-m-d';
...
$today->format($myFormat);
...
于 2013-03-06T14:43:55.860 に答える
4

いいえ、しかしあなたは関数をカレーすることができます:

$myFormat = function($obj) {return $obj->format("Y-m-d");};

if( $myFormat($posted_on) == $myFormat($today))

またはもっときれいに:

class MyDateTime extends DateTime {
    public function format($fmt="Y-m-d") {
        return parent::format($fmt);
    }
}
$posted_on = new MyDateTime($date_started);
$today = new MyDateTime("today");
$yesterday = new MyDateTime("yesterday");

if( $posted_on->format() == $today->format()) {...
于 2013-03-06T14:47:02.997 に答える
1
$posted_on = new DateTime($date_started);
$today = new DateTime('today');
$yesterday = new DateTime('yesterday');
$myFormat = 'Y-m-d';

if($posted_on->format($myFormat) == $today->format($myFormat)) {
    $post_date = 'Today';
}
elseif($posted_on->format($myFormat) == $yesterday->($myFormat)) {
    $post_date = 'Yesterday';
}
else{
    $post_date = $posted_on->format('F jS, Y');
}

echo 'Started '.$post_date;

それがあなたにできる最善のことです。私はフォーマットを定数または設定ファイルのどこかに置きますが、w/eです。あなたがやろうとしていることは可能ですが、それを読んだときに私が実際に泣き始めたほど恐ろしいです。

この場合も私はこのようなことをします

$interval   = $posted_on->diff(new DateTime('today'));
$postAge    = $interval->format('%d'); // Seems to be the best out of many horrible options
if($postAge == 1)
{
    $post_date = 'Today';
}
else if($postAge == 2)
{
    $post_date = 'Yesterday';
}
else
{
    $post_date = $posted_on->format('F jS, Y');
}
于 2013-03-06T14:53:09.073 に答える