PHP Mktime 显示 3 月 2 日,当我为每个月转储时
PHP Mktime shows 2 March's when I dump foreach month
我一直在使用以下功能,直到前几天时钟向前走:
function months($month_format="F") {
$array = array();
for ($i = 1; $i <=12; $i++) {
$array[$i]['string'] = date($month_format, mktime(0,0,0,$i));
$array[$i]['int'] = date('m', mktime(0,0,0,$i));
}
return $array;
}
它输出一个数组:
- 字符串[]
- 整数[]
从前几天开始(比如 2 天前,当英国的时钟向前走时),该函数似乎显示了 2 个三月和 0 个二月....
非常非常奇怪...
我正在将 rethinkdb 与他们的 eachPosTime 函数一起使用...不确定这是否是导致它的原因。
我尝试使用不同的函数,但仍在使用 mktime:
function months(){
$start_month = 1;
$end_month = 12;
$start_year = date("Y");
$array = array();
for($m=$start_month; $m<=12; ++$m){
echo $m.'<br>';
$array[$m]['string'] = date('F', mktime(0,0,0,$m));
$array[$m]['int'] = date('m', mktime(0,0,0,$m));
if($start_month == 12 && $m==12 && $end_month < 12)
{
$m = 0;
$start_year = $start_year+1;
}
//echo date('F Y', mktime(0, 0, 0, $m, 1, $start_year)).'<br>';
if($m == $end_month) break;
}
return $array;
}
不过,我运气不好。
检查此处的图像,它显示了 months() 函数的输出:
Output of the months() function
这与时钟的变化无关,而是月份的时间,以及 the mktime function 完全无用的签名。
当您从“mktime”调用中省略参数时,它们会填入今天的日期。在您的情况下,您指定了没有日期或年份的月份,因此当您要求 mktime(0, 0, 0, 2);
时,它将填写今天的日期和年份,并查找 2021 年 2 月 29 日 - 不存在的一天。由于时间库“溢出”日期,因此变成了 3 月 1 日。
解决方案是像 mktime(0,0,0,$m,1)
那样将一个明确的日期传递给“mktime”,或者使用一个不太容易混淆的函数。
我一直在使用以下功能,直到前几天时钟向前走:
function months($month_format="F") {
$array = array();
for ($i = 1; $i <=12; $i++) {
$array[$i]['string'] = date($month_format, mktime(0,0,0,$i));
$array[$i]['int'] = date('m', mktime(0,0,0,$i));
}
return $array;
}
它输出一个数组:
- 字符串[]
- 整数[]
从前几天开始(比如 2 天前,当英国的时钟向前走时),该函数似乎显示了 2 个三月和 0 个二月....
非常非常奇怪... 我正在将 rethinkdb 与他们的 eachPosTime 函数一起使用...不确定这是否是导致它的原因。
我尝试使用不同的函数,但仍在使用 mktime:
function months(){
$start_month = 1;
$end_month = 12;
$start_year = date("Y");
$array = array();
for($m=$start_month; $m<=12; ++$m){
echo $m.'<br>';
$array[$m]['string'] = date('F', mktime(0,0,0,$m));
$array[$m]['int'] = date('m', mktime(0,0,0,$m));
if($start_month == 12 && $m==12 && $end_month < 12)
{
$m = 0;
$start_year = $start_year+1;
}
//echo date('F Y', mktime(0, 0, 0, $m, 1, $start_year)).'<br>';
if($m == $end_month) break;
}
return $array;
}
不过,我运气不好。 检查此处的图像,它显示了 months() 函数的输出:
Output of the months() function
这与时钟的变化无关,而是月份的时间,以及 the mktime function 完全无用的签名。
当您从“mktime”调用中省略参数时,它们会填入今天的日期。在您的情况下,您指定了没有日期或年份的月份,因此当您要求 mktime(0, 0, 0, 2);
时,它将填写今天的日期和年份,并查找 2021 年 2 月 29 日 - 不存在的一天。由于时间库“溢出”日期,因此变成了 3 月 1 日。
解决方案是像 mktime(0,0,0,$m,1)
那样将一个明确的日期传递给“mktime”,或者使用一个不太容易混淆的函数。