去年PHP的今天怎么过?
How to get this day last year in PHP?
所以我目前正在使用 Carbon 获取日期、时间和比较。我可以轻松地执行 subYear() 以获得去年的 date。现在我需要一些东西来在去年的同一时间获得完全相同的 day,例如四月第二周的星期三。
我希望必须做一些事情来计算当前的星期几,例如 3 和一年中的当前周,然后得到去年相同的值。
只是想我会检查是否有任何可用的东西已经在 Carbon 或其他 PHP 工具中执行此操作?谢谢
我认为 DateTime::setISODate()
正是您所需要的:
$today = new \DateTime();
$year = (int) $today->format('Y');
$week = (int) $today->format('W'); // Week of the year
$day = (int) $today->format('w'); // Day of the week (0 = sunday)
$sameDayLastYear = new \DateTime();
$sameDayLastYear->setISODate($year - 1, $week, $day);
echo "Today: ".$today->format('Y-m-d (l, W)').PHP_EOL;
echo "Same week and day last year: ".$sameDayLastYear->format('Y-m-d (l, W)').PHP_EOL;
输出(今天,2015-05-05):
Today: 2015-05-05 (Tuesday, 19)
Same week and day last year: 2014-05-06 (Tuesday, 19)
让它更简单 :)
echo date('Y-m-d (l, W)', strtotime("-52 week"));
编辑:我忘了写输出::)
2014-05-07 (Wednesday, 19)
更新2:
jeromegamez 的代码有问题。一年可以包含 52 或 53 周。以 2016 年 1 月 3 日为例:
$today = new \DateTime();
$today->setDate ( 2016 , 1 , 3 );
$year = (int) $today->format('Y');
$week = (int) $today->format('W'); // Week of the year
$day = (int) $today->format('w'); // Day of the week (0 = sunday)
$sameDayLastYear = new \DateTime();
$sameDayLastYear->setISODate($year - 1, $week, $day);
echo "Today: ".$today->format('Y-m-d (l, W)').PHP_EOL;
echo "Same week and day last year: ".$sameDayLastYear->format('Y-m-d (l, W)').PHP_EOL;
结果是:
Today: 2016-01-03 (Sunday, 53)
Same week and day last year: 2015-12-27 (Sunday, 52)
只有五天而不是几年:)
对于其他使用 Carbon 的人,您可以采用与 splash 类似的解决方案,只需:
Carbon::now()->subWeeks(52)
给出2014-05-07 14:11:48
更简单的<3
date('Y-m-d', strtotime('last year'))
所以我目前正在使用 Carbon 获取日期、时间和比较。我可以轻松地执行 subYear() 以获得去年的 date。现在我需要一些东西来在去年的同一时间获得完全相同的 day,例如四月第二周的星期三。
我希望必须做一些事情来计算当前的星期几,例如 3 和一年中的当前周,然后得到去年相同的值。
只是想我会检查是否有任何可用的东西已经在 Carbon 或其他 PHP 工具中执行此操作?谢谢
我认为 DateTime::setISODate()
正是您所需要的:
$today = new \DateTime();
$year = (int) $today->format('Y');
$week = (int) $today->format('W'); // Week of the year
$day = (int) $today->format('w'); // Day of the week (0 = sunday)
$sameDayLastYear = new \DateTime();
$sameDayLastYear->setISODate($year - 1, $week, $day);
echo "Today: ".$today->format('Y-m-d (l, W)').PHP_EOL;
echo "Same week and day last year: ".$sameDayLastYear->format('Y-m-d (l, W)').PHP_EOL;
输出(今天,2015-05-05):
Today: 2015-05-05 (Tuesday, 19)
Same week and day last year: 2014-05-06 (Tuesday, 19)
让它更简单 :)
echo date('Y-m-d (l, W)', strtotime("-52 week"));
编辑:我忘了写输出::)
2014-05-07 (Wednesday, 19)
更新2:
jeromegamez 的代码有问题。一年可以包含 52 或 53 周。以 2016 年 1 月 3 日为例:
$today = new \DateTime();
$today->setDate ( 2016 , 1 , 3 );
$year = (int) $today->format('Y');
$week = (int) $today->format('W'); // Week of the year
$day = (int) $today->format('w'); // Day of the week (0 = sunday)
$sameDayLastYear = new \DateTime();
$sameDayLastYear->setISODate($year - 1, $week, $day);
echo "Today: ".$today->format('Y-m-d (l, W)').PHP_EOL;
echo "Same week and day last year: ".$sameDayLastYear->format('Y-m-d (l, W)').PHP_EOL;
结果是:
Today: 2016-01-03 (Sunday, 53)
Same week and day last year: 2015-12-27 (Sunday, 52)
只有五天而不是几年:)
对于其他使用 Carbon 的人,您可以采用与 splash 类似的解决方案,只需:
Carbon::now()->subWeeks(52)
给出2014-05-07 14:11:48
更简单的<3
date('Y-m-d', strtotime('last year'))