0

したがって、次のようなコードがあります。

$dateBase = $amount->getDate();
for ($i = 1; $i <= 3; $i++) {
    $installment = new Installment();
    if ($i == 1) {
        //do stuff
    } else {
        var_dump('1-'.$dateBase->toString());
        $dateBase->addMonth(1);
        var_dump('2-'.$dateBase->toString());
    }
    $installment->setDate($dateBase);
    $dataBase = clone $dataBase;
}

そして、出力は次の とおり
です

, 2014 12:00:00 AM"
string(26) "2015 年 1 月 31 日 12:00:00 AM"

2 番目のループ ($i=2 の場合) で、彼は 1 か月ではなく 2 か月を追加していることがわかります。

EDIT1:さらに調査を行ったところ、タイムゾーンのバグがあると思います。次のようにコードを変更しました

$date = new Zend_Date('10/1/2014');
var_dump($date);
$date->addMonth(1);
var_dump($date, $dateBase);
$dateBase->addMonth(1);
var_dump($dateBase); 

出力は次のとおりです。

object(Zend_Date)#3754 (8) {  
  ["_locale":"Zend_Date":private]=>  
  string(2) "en"  
  ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  string(10) "1412114400"  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(12) "Europe/Paris"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-3600)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
  bool(true)  
}  
object(Zend_Date)#3754 (8) {  
  ["_locale":"Zend_Date":private]=>  
  string(2) "en"  
  ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  int(1414796400)  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(12) "Europe/Paris"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-3600)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
  bool(true)  
}  

object(Zend_Date)#3755 (8) {  
    ["_locale":"Zend_Date":private]=>  
    string(2) "en"  
    ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  string(10) "1412114400"  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(9) "Etc/GMT-2"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-7200)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
  bool(true)  
}  

object(Zend_Date)#3755 (8) {  
  ["_locale":"Zend_Date":private]=>  
  string(2) "en"  
  ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  string(10) "1417384800"  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(9) "Etc/GMT-2"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-7200)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
bool(true)  
}  

$date と $dataBase の日付に違いはなく、タイムゾーンだけであることがわかりますが、両方に 1 か月を追加すると、反応が異なります。$dateBase には余分な月が追加されました。

4

1 に答える 1

0

Zend Framework 1.12 のドキュメントには、次のような記述があります。

たとえば、1 月 31 日に 1 か月足すと、SQL に詳しい人は結果として 2 月 28 日を期待します。一方、Excel と OpenOffice に精通している人は、結果として 3 月 3 日を期待するでしょう。この問題は、結果の月に元の日付に設定されている日がない場合にのみ発生します。

これについてわからない場合は、このリンクを確認してください。

http://framework.zend.com/manual/1.12/en/zend.date.overview.html

于 2014-10-02T09:14:50.040 に答える