2017-07-31 129 views
1

我正在学习使用PHP日期时间类,我遇到了方便的'setDate'方法。我试图做以下比较2日期:PHP设置日期时间功能设置不同的日期

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

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

} else{ 
    echo "no"; 
} 

根据当前日期它将返回'否',但它返回'是'。所以我做了var_dump($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日作为是不是我打算设定日期。

当然,我正在做的事情真的有问题。请帮我找到我的错误。由于

+3

尝试在的setDate功能 –

+4

号码与'0'在PHP前缀的第二个参数用8代替08被视为八进制,所以'08'是八进制8,这是一个无效的八进制数,所以被视为0 –

回答

2

相反的08,它必须是8象下面这样: -

<?php 

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

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

} else{ 
    echo "no"; 
} 

输出: - https://eval.in/839909

为什么: - 作为@马克贝克准确分辨: -

在PHP中以0开头的数字被视为octal,所以08octal 8,这是一个无效的八进制数MBER,所以视为0

而且由于它你yes作为输出: - https://eval.in/839910

可以检查数量为八进制或低于不喜欢: -

<?php 

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

echo is_octal(08); // true 

输出: - https://eval.in/839915(上面的代码将工作在php < 7)

0

没有必要克隆 - 只是实例化新的DateTime对象根据您的需求。例如:https://iconoun.com/demo/temp_sameer.php

<?php // demo/temp_sameer.php 
 
/** 
 
* Working with DateTime objects 
 
* 
 
* https://stackoverflow.com/questions/45426371/php-setdate-function-of-datetime-setting-different-date 
 
* http://php.net/manual/en/datetime.construct.php 
 
*/ 
 
error_reporting(E_ALL); 
 
echo '<pre>'; 
 

 
// NOW 
 
$date = new DateTime(); 
 

 
// DIFFERENT DATE 
 
$newDate = new DateTime('2017-08-29'); 
 

 
// SHOW THE OBJECTS 
 
var_dump($date, $newDate); 
 

 
// MAKE THE COMPARISONS 
 
if($date > $newDate){ 
 
    echo 'yes'; 
 
} else{ 
 
    echo "no"; // OUTPUTS "no" 
 
}

+1

我很想知道你什么时候在你的网站上保留这个URL https://iconoun.com/demo/temp_sameer.php - 如果当你决定不再使它可用或者你不再是域名的注册人,它会触发一个404,而你的问题反过来被标记为一个不存在的URL,或由其他人编辑 未来。改用https://eval.in/的网站通常是很好的做法/想法。 –

+1

@ Fred-ii-我同意你的意见。给一些个人类型的域的URL不是一个好主意。使用一个完整的免费在线平台如'eval.in','fiddle.net'等是正确的主意。 –

+0

感谢您的意见。发布的URL是代码片段中显示的确切资源,所以它只是一个方便的事情(它显示了我实际测试代码的问题的作者)。任何人都可以从Stack复制代码片段,并获得您在URL中看到的相同结果。我通常将这些例子保留几个月或几年。 –