![](/img/trans.png)
[英]Php DateTime::setDate() not working on first DatePeriod iteration
[英]PHP setDate function of DateTime setting different date
我正在學習使用PHP DateTime類,並且遇到了方便的“ setDate”方法。 我試圖做以下比較兩個日期:
$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作為我不打算設置的日期。
當然,我所做的事情確實有問題。 請幫助我找到我的錯誤。 謝謝
代替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
為什么:-正如@Mark Baker正確告訴的那樣:-
在PHP中以0
開頭的數字被視為octal
,因此08
是octal 8
,這是無效的八進制數字,因此被視為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中運行)
無需克隆-只需根據需要實例化新的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" }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.