PHP日期的strtotime不工作

问题描述:

我写这段代码PHP日期的strtotime不工作

echo date("Y-m-d", strtotime($date, strtotime("+ " . $days . " days"))); 

$date = 2012-04-12 
$days = 15 

我期待$days(15天)添加到我期待获得2012-04-27日期(2012-04-12)和该代码返回我2012-04-12,我究竟做错了什么?

echo date('Y-m-d', strtotime('+15 days', strtotime('2012-04-12'))); 
+0

谢谢,就是我在找的:) – user979331 2012-04-12 18:24:45

为什么不只是使用DateTime类?

$date = new DateTime(); 
$date->add(new DateInterval('P15D')); 

echo date("Y-m-d", strtotime("+$days days", $date)); 

不要使用的strtotime()。这是不可靠的,尽管你并没有真正做出任何真正会回来咬你的东西。但取决于时间依然是一件坏事,因为它会让你的生活在某些时候变得悲惨。

使用DateTime代替:

$now = DateTime::CreateFromFormat('Y-m-d', '2012-04-12'); 
$then = $now->add(new DateInterval('P15D')); 
$date = $then->format('Y-m-d'); 
+6

'strtotime()'不是不可靠的;实际上,DateTime类在表单下使用它。 – 2012-04-12 18:17:19

+0

是的,如果你是自动检测的东西。但是如果你有一个已知格式的日期,那么根本不要使用strtotime。 – 2012-04-12 18:18:50

+2

原则上,我同意你的观点,马克,但我质疑实例化对象的必要性,以做一些如此微不足道的事情。如果他打算进行时区更改或其他更高级的操作,那么绝对是使用该对象。只需添加几天?咩。 – 2012-04-12 18:20:29

$date = '2012-04-12'; 
$days = 15; 
echo date('Y-m-d', strtotime("$date +$days days")); 

你的语法不正确。将代码全部放在一行是没有必要的,甚至是无用的。在这种情况下,我们发现尝试这样做会导致语法问题。不要害怕几个额外的小变量!

$date = '2012-04-12'; 
$days = 15; 

$ts = strtotime($date); 
$new_ts = strtotime('+'.$days.' days', $ts); 
$new_date = date('Y-m-d', $new_ts); 

清晰,易读,易调试。如果你喜欢的代码打高尔夫球,你可以把它放在同一行,但有写它更明确的方式:

$new_date = date (
    'Y-m-d', 
    strtotime (
     '+'.$days.' days', 
     strtotime($date) 
    ) 
); 

文档