日期时间设置不同日期的PHP setDate函数

日期时间设置不同日期的PHP setDate函数,php,datetime,Php,Datetime,我正在学习使用PHP DateTime类,我遇到了方便的“setDate”方法。为了比较两个日期,我尝试了以下操作: $date = new DateTime(); $newDate = clone $date; $newDate->setDate(2017, 08, 29); if($date > $newDate){ echo 'yes'; } else{ echo "no"; } 根据当前日期,应返回“否”,但返回“是”。所以我做了一个var_转储($ne

我正在学习使用PHP DateTime类,我遇到了方便的“setDate”方法。为了比较两个日期,我尝试了以下操作:

$date = new DateTime();
$newDate = clone $date;
$newDate->setDate(2017, 08, 29);

if($date > $newDate){
    echo 'yes';

} else{
    echo "no";
}
根据当前日期,应返回“否”,但返回“是”。所以我做了一个
var_转储($newDate)并返回:

object(DateTime)[2]
  public 'date' => string '2016-12-29 00:31:02.000000' (length=26)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Zurich' (length=13)
它返回的日期为2016-12-29,这不是我打算设定的日期


我现在所做的肯定有什么地方出了问题。请帮我找出我的错误。谢谢

而不是
08
,它需要是
8
,如下所示:-

<?php

$date = new DateTime();
$newDate = clone $date;
$newDate->setDate(2017, 8, 29);

if($date > $newDate){
    echo 'yes';

} else{
    echo "no";
}
<?php

function is_octal($x) {
    return decoct(octdec($x)) == $x;
}

echo is_octal(08); // true

输出:-(上面的代码将在php中工作不需要克隆-只需根据需要实例化新的DateTime对象。示例:


尝试在setDate函数的第二个参数中使用8而不是08 PHP中前缀为
0
的数字被视为八进制,因此
08
是八进制8,这是一个无效的八进制数,所以被视为0。我很想知道你什么时候会在你的网站上保留该URL——如果你决定不再提供该URL,或者你什么时候决定不再提供该URL“如果您不再是该域的注册人,它将触发404,反过来您的问题将被标记为不存在的URL,或者将来由其他人编辑。使用的网站通常是一个好的做法/想法。@Fred ii-我同意您的看法。提供某个个人域的URL不是一个好主意。使用完整的f。”ree在线平台,如
eval.in
fiddle.net
等,是个不错的主意。谢谢你的评论。发布的URL就是代码片段中显示的确切资源,所以这只是一件方便的事情(它显示了问题的作者,我实际测试了代码)。任何人都可以从堆栈中复制代码片段,并获得与URL相同的结果。我通常会将这些示例保留数月或数年。