mktime在6月/ 7月产生错误的奇怪行为

fre*_*ed2 3 php mktime

我有以下笨拙的代码将日期字符串转换为另一个日期字符串.

//$invDate starts as a date string in format dd/mm/yyyy
$dateArray = explode('/', $invDate);      
$invDate = $dateArray[0] .' '.  date("F",mktime (1,1,1,$dateArray[1])) .' '. $dateArray[2];
Run Code Online (Sandbox Code Playgroud)

我并不为此感到特别自豪,但它在一个美国和英国的约会方法可能产生混淆的国家产生了一个明确的约会.

它的工作时间很长,然后突然间它已经开始转动了

01/06/2012
Run Code Online (Sandbox Code Playgroud)

1 July 2012
Run Code Online (Sandbox Code Playgroud)

我已经看过mktime的行为,并且看不出为什么mktime (1,1,1,6)要在7月份制作日期的原因.有任何想法吗?

Pau*_*aul 5

发生这种情况是因为mktime默认为缺少字段的当前时间.因为你没有指定一天,而今天May 31st它是假定的June 31,它不存在所以它包裹到七月.通过向mktime添加第五个参数来指定一天:

date("F", mktime(0, 0, 0, $dateArray[1], 1))
Run Code Online (Sandbox Code Playgroud)