簡體   English   中英

日期時間的PHP setDate函數設置不同的日期

[英]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 Ba​​ker正確告訴的那樣:-

在PHP中以0開頭的數字被視為octal ,因此08octal 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM