簡體   English   中英

去年,今年,明年用php DateTime

[英]last year, this year, next year with php DateTime

我正在嘗試創建一個Dropbox,它將使用php DateTime對象顯示去年,當前年份和下一年。

在我當前的代碼中,我創建了三個對象,並且必須在其中的兩個上調用方法。 這似乎對資源有點沉重。

$today = new DateTime();
$last_year=new DateTime();
$last_year->sub(new DateInterval('P1Y'));
$next_year = new DateTime();
$next_year->add(new DateInterval('P1Y'));
echo date_format($last_year, 'Y').' '.date_format($today, 'Y').' '.date_format($next_year, 'Y');

另一種我發現只使用1個對象的方法是

$today = new DateTime();
echo date_format($today->sub(new DateInterval('P1Y')), 'Y').' '.date_format($today->add(new DateInterval('P1Y')), 'Y').' '.date_format($today->add(new DateInterval('P1Y')), 'Y');

但那將變得非常混亂。 有人能告訴我使用DateTime()更好的方法嗎? 因為幾個月我會需要類似的東西嗎?

根據您的PHP版本(> = 5.4),您可以將它整理一下: -

$today = new DateTime();
$last_year=(new DateTime())->sub(new DateInterval('P1Y'));
$next_year = (new DateTime())->add(new DateInterval('P1Y'));
echo $last_year->format('Y').' '.$today->format('Y').' '.$next_year->format('Y');

看它工作

更可讀和簡潔的選項可能是使用\\DateTimeImmutable

$today = new DateTimeImmutable();
$one_year = new DateInterval('P1Y');

$last_year = $today->sub($one_year);
$next_year = $today->add($one_year);
echo $last_year->format('Y').' '.$today->format('Y').' '.$next_year->format('Y');

看它工作

除此之外,這一切看起來都很好。 在需要時擔心優化。

試試這個。 這非常有效。

 echo date("Y");   
 echo date("Y",strtotime("-1 year"));
echo date("Y",strtotime("+1 year"))

也可以通過創建一個對象並將其用於所有三個計算來限制new DateInterval('P1Y')的調用?

$interval = new DateInterval('P1Y');

$dateTime = new DateTime();
$lastYear = $dateTime->sub($interval)->format('Y');

$dateTime = new DateTime();
$nextYear = $dateTime->add($interval)->format('Y');

$dateTime = new DateTime();
$thisYear = $dateTime->format('Y');

echo $lastYear . ' ' . $thisYear . ' ' . $nextYear;

通過將單個字符串分成多個命令,總能幫助我減少混淆。

<?php

$d = new DateTime('now');
$cy = $d->format('Y'); 

// Get previous year 
$d->modify('-1 year');
$py = $d->format('Y');

//Next year : Since object has previous year, so +2 to get next year
$d->modify('+2 year');
$ny = $d->format('Y');

echo "Previous Year: ".$py."<br>";
echo "Current Year : ".$cy."<br>";
echo "Next Year : ".$ny."<br>";

$d = new DateTime('now');
$cm = $d->format('m'); 

$d->modify('-1 month');
$pm = $d->format('m'); 

$d->modify('+2 month');
$nm = $d->format('m');

echo "Previous Month: ".$pm."<br>";
echo "Current Month : ".$cm."<br>";
echo "Next Month : ".$nm."<br>";
?>

產量

Previous Year: 2013
Current Year : 2014
Next Year : 2015
Previous Month: 12
Current Month : 01
Next Month : 02

只需使用基本數學:

$current = date('Y');
$prev = $current - 1;
$next = $current + 1;

在閱讀完所有答案之后,我想出了這個功能來創建一年的下拉框。 $ name是$ year_number的名稱,是您希望在當前年份之前一年開始顯示此功能的年數,但您可以輕松修改它以從較早的年份開始顯示。

function drop_down_box_date_year(&$dbconn, $name, $year_number){
$today = new DateTime();
$interval = new DateInterval('P1Y');
$startyear = (new DateTime())->sub($interval);
echo '<select name="'.$name.'_year">';
for($i=0;$i<$year_number;$i++){ 
    if($startyear->format('Y')==$today->format('Y')){
        echo '<option value="'.$startyear->format('Y').'" selected>'.$startyear->format('Y').'</option>';           
    }else{
        echo '<option value="'.$startyear->format('Y').'">'.$startyear->format('Y').'</option>';
    }
    $startyear->add($interval);
}
echo'</select>';

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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