2014-10-01 6 views
0

Итак, у меня есть код, как это следующим образом:Zend_Date addMonth добавление более параметра

$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; 
} 

И выход:
строка (25) «1-1 октября 2014 12:00:00 AM "
string (25)" 2-Dec 1, 2014 12:00:00 AM "
string (25)" 1-Dec 1, 2014 12:00:00 AM "
строка (26)" 2- 31 января 2015 г. 12:00:00 «

Вы можете видеть, что во втором цикле (когда $ i = 2) он добавляет 2 месяца к j усть один

EDIT1: Doeing еще некоторые исследования, я думаю, что есть временная зона ошибка, я изменил код, как это следует

$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) 
} 

Вы можете видеть, что нет разницы между датой даты и $ dataBase, только часовым поясом, но когда мы добавляем один месяц к обоим, они реагируют по-другому, $ dateBase добавляется дополнительный месяц

ответ

0

Zend Framework 1,12 Документация говорит что-то вроде этого:

Например, при добавлении одного месяца до 31-го января, люди, знакомые с SQL будет ожидать 28 февраля в результате. С другой стороны, люди, знакомые с Excel и OpenOffice, ожидают 3 марта в качестве результата. Проблема возникает только в том случае, если в конечном месяце не установлен день, установленный в исходную дату.

Проверить эту ссылку, если вы не знаете об этом:

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

+0

Да, но это, вероятно, проблема часовых поясов, если читать редактирования я сделал на своем посту – Murilo

 Смежные вопросы

  • Нет связанных вопросов^_^