我正在尝试使用从文件中提取的一些字符串值来构建时间。 这基本上就是运行的代码。
$hour = "18";
$minutes = "0";
$month = "28";
$day = "4";
$year = "2016";
echo("<div>"."Current PHP version: " . phpversion()."</div>");
echo("<div>hour :: ".(int)$hour."</div>");
echo("<div>minutes :: ".(int)$minutes."</div>");
echo("<div>month :: ".(int)$month."</div>");
echo("<div>day :: ".(int)$day."</div>");
echo("<div>year :: ".(int)$year."</div>");
$built_time = mktime((int)$hour,(int)$minutes,0,(int)$month,(int)$day,(int)$year);
echo("<div> Built Time [Y-m-d H:i:s]: ".date( 'Y-m-d H:i:s',$built_time)."</div>");
输出的接收是:
多次尝试产生了以下结果
正如您所看到的,它确实提供了正确的结果!为什么会这样呢?它不是一个时区问题,因为它的发布日期是未来几年。
根据mktime() documentation,参数序列也是正确的。不知道为什么这个电话会失败。
答案 0 :(得分:3)
根据您的输入,结果是正确的。
mktime
加密month
值介于1-12之间。在除上一个月之外的每次尝试中,值均为28,28,21,21.
因此,当月份的值大于12时,它会引用下一年的适当月份。因此,在前两个案例中,它将是04
,而在第3和第4个案例中,它将是09
。
当您将月份值大于12时,它会计算当月之后的N个月。所以在前两个案例中它 2018年4月(04)以及第三和第四个九月(09)2017 。
因此根据您的输入输出是正确的。
答案 1 :(得分:2)
这绝对是正确的输出。 2016年第28个月是2018年4月
答案 2 :(得分:1)
这可能只是一个简单的错误,但一年内没有28个月,所以我猜月和日交换了。
$hour = "18";
$minutes = "0";
$month = "4";
$day = "28";
$year = "2016";
$built_time = mktime((int)$hour,(int)$minutes,0,(int)$month,(int)$day,(int)$year);
echo"
<div>"."Current PHP version: " . phpversion()."</div>
<div>hour :: {$hour}</div>
<div>minutes :: {$minutes}</div>
<div>month :: {$month}</div>
<div>day :: {$day}</div>
<div>year :: {$year}</div>
<div> Built Time [Y-m-d H:i:s]: ".date( 'Y-m-d H:i:s',$built_time)."</div>";
/*
outputs
Current PHP version: 5.3.2
hour :: 18
minutes :: 0
month :: 4
day :: 28
year :: 2016
Built Time [Y-m-d H:i:s]: 2016-04-28 18:00:00
*/
答案 3 :(得分:1)
试试这个
$built_time=strtotime($year."-".$month."-".$day." ".$hour.":".$minutes.":00");
echo("<div> Built Time [Y-m-d H:i:s]: ".date( 'Y-m-d H:i:s',$built_time)."</div>");