strtotime 给出奇怪的结果

strtotime giving odd result

好的,我希望有人能看到我哪里出错了。

$date = "2015-02-4";
$schedule = strtotime('+1 month',$date);

出于某种原因,这给了我 2680415 作为结果,而不是我想要的 1425488400,但如果我这样做了

$date = "2015-02-4";
$schedule = strtotime($date);

我得到了正确答案,即 1422982800。

$date 并不是这样分配的,它是数据库查询的结果添加到当前的月份和年份。

您应该在对 strtotime 的调用中将 +1 MONTH 表达式附加到 $date,而不是将它们作为单独的参数传递。

date_default_timezone_set('Asia/Bangkok');

$date     = "2015-02-4";
$schedule = strtotime($date);
echo "Original timestamp:  ", $schedule, PHP_EOL;
echo "Original date:       ", date("Y-m-d", $schedule), PHP_EOL;

$schedule = strtotime($date . ' +1 MONTH');
echo "+ 1 month timestamp: ", $schedule, PHP_EOL;
echo "+ 1 month date:      ", date("Y-m-d", $schedule), PHP_EOL;

输出:

Original timestamp:  1422982800
Original date:       2015-02-04
+ 1 month timestamp: 1425402000
+ 1 month date:      2015-03-04

如前所述,strtotime 接受 int 作为第二个参数。所以处理前要把字符串转成时间戳:

$date = "2015-02-4";
$schedule = strtotime('+1 month', strtotime($date));

或者使用 @mhall 的回答中所示的连接。