2016-01-23 54 views
1

這個代碼奇怪的行爲:PHP /添加個月爲DateTime返回錯誤的日期

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P3M'))); 

將返回

class DateTime#2 (3) { 
    public $date => 
    string(19) "2016-03-01 15:13:32" 
    public $timezone_type => 
    int(3) 
    public $timezone => 
    string(14) "Africa/Algiers" 
} 

,而不是預期的...

class DateTime#2 (3) { 
    public $date => 
    string(19) "2016-02-29 15:13:32" 
    public $timezone_type => 
    int(3) 
    public $timezone => 
    string(14) "Africa/Algiers" 
} 

任何想法?

+3

這就是我期望的結果。 –

+2

這個問題不能回答,因爲你期望它根據你的任意規則做的事情與語言的規則和大多數人會希望它運作的規則衝突。所以,除非你可以/想要改變你的問題,否則我不會看到如何回答這個問題。 – PeeHaa

回答

0

的例子

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P3M'))); 

不能被認爲是「加3個月每月的最後一天」,而是「加3個月每月的30日」。自2016年2月起有29天而不是28天,從3月1日起的第一天起有30天。同樣,請注意,

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P2M'))); 

土地在1月30日,而不是31日。