我正在尝试创建一个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');
Run Code Online (Sandbox Code Playgroud)
另一种我发现只使用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');
Run Code Online (Sandbox Code Playgroud)
但那将变得非常混乱.有人可以告诉我一个更好的方法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');
Run Code Online (Sandbox Code Playgroud)
看它工作.
可以使用更易读和简洁的选项\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');
Run Code Online (Sandbox Code Playgroud)
看它工作.
除此之外,这一切看起来都很好.在需要时担心优化.
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;
Run Code Online (Sandbox Code Playgroud)
通过将单个字符串分解为多个命令总是可以帮助我减少混乱。
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |