3

私はこの関数を書きます:

public function calcDifferentDate($dateStart, $dateEnd = false, $output = Zend_Date::DAY)
{
    $dateEnd = $dateEnd ? $dateEnd : Zend_Date::now()->toString('YYYY-MM-dd');
    $dateStartZD = new Zend_Date($dateStart, 'YYYY-MM-dd');
    $dateEndZD = new Zend_Date($dateEnd, 'YYYY-MM-dd');
    return $dateEndZD->sub($dateStartZD)->toString($output);
}

これを呼び出す場合:

echo calcDifferentDate('2011-11-10');

そして今日は: '2011-11-14' 返される出力は なぜ05ではなく? 04私はどこで間違っていますか?

PS私はZF 1.11.11バージョンを使用しています


私は解決策を見つけました

この作品右!:D

public function calcDaysDiffDate($dateStart, $dateEnd = '')
{
    $dateEnd = !empty($dateEnd) ? $dateEnd : Zend_Date::now()->toString('YYYY-MM-dd');
    $dateStartZD = new Zend_Date($dateStart, 'YYYY-MM-dd');
    $dateEndZD = new Zend_Date($dateEnd, 'YYYY-MM-dd');
    $dateStartZD->sub($dateEndZD);
    return $dateStartZD->getTimestamp() / (60 * 60 * 24);
}
4

3 に答える 3

1

代わりにこれを返してみてください:

$newDate = new Zend_Date($dateEndZD->sub($dateStartZD), 'YYYY-MM-dd');
return $newDate->get($output);

計算が間違っています。後でそれを取得しようとします。しかし、今のところ、ロジックがそれに似ている必要があります。コメントで述べたように、日付減算が呼び出し元のオブジェクトfatal errorではなく整数を返していたため、メソッドの結果が.Zend_DatetoString()

編集

私の思いがけない、よく考えられていない以前の回答で申し訳ありません。より慎重にテストした結果、問題が見つかったと思います。この関数は、結果の日付減算から返される日付の一部であるsub()オプションの 2 番目のパラメーターを受け入れます。できたとしても、今すぐ$part電話する必要はありません。toString()

したがって、これ以上の別れはありませんが、ここでは固定の return ステートメントを使用しています。

public function calcDifferentDate($dateStart, $dateEnd = false, $output = Zend_Date::DAY)
{
    $dateEnd = $dateEnd ? $dateEnd : Zend_Date::now()->toString('YYYY-MM-dd');
    $dateStartZD = new Zend_Date($dateStart, 'YYYY-MM-dd');
    $dateEndZD = new Zend_Date($dateEnd, 'YYYY-MM-dd');
    return $dateEndZD->sub($dateStartZD, $output); // <-- fixed
}

2 回目の編集

OPとチャットした後、方法の違いにより、私のソリューションはZF 1.11.xでは機能しないようZend_Date::sub()です。

于 2011-11-14T11:11:09.507 に答える
1

この質問に対する受け入れられた答え: 2 つの Zend_Date オブジェクトの日付部分を比較するにはどうすればよいですか? DateTime次の方法の代わりに使用することをお勧めしZend_Dateます (ニーズに合わせてコードを少し変更しました)。

$date1 = new DateTime('2011-11-14');
$date2 = new DateTime('2011-11-10');
$diffDays = $date1->diff($date2)->days;

私はそれを試してみましたが、正しい結果を返すようです。Zend_Date絶対に使用する必要がない場合は、 の良い代替手段になる可能性があります。

それが役立つことを願って、

于 2011-11-14T12:53:23.937 に答える