php - 查找去年同一天的日期

时间:2011-12-19 22:36:01

标签: php date

所以,在PHP中,我试图根据一周的同一天返回去年的日期值。 EX :(星期一)2011-12-19输入应该返回(星期一)2010-12-20。

我只是按照-364这样做,但那时闰年失败了。我遇到了另一个功能:

$newDate = $_POST['date'];
$newDate = strtotime($newDate);
$oldDate = strtotime('-1 year',$newDate);

$newDayOfWeek = date('w',$oldDate);
$oldDayOfWeek = date('w',$newDate);
$dayDiff = $oldDayOfWeek-$newDayOfWeek;

$oldDate = strtotime("$dayDiff days",$oldDate);

echo 'LAST YEAR DAY OF WEEK DATE = ' . date('Ymd', $oldDate);

但是,当你尝试输入一个星期日日期时失败,因为它是0(星期日)减去6(去年日期的星期六),并返回值为T-6。 IE输入2011-12-25让你2010-12-19而不是2011-12-26。

我有点难以在php中找到一个好的解决方案,它可以在闰年工作,显然是一周中的所有日子。

有什么建议吗?

谢谢!

4 个答案:

答案 0 :(得分:9)

如何使用PHP的DateTime功能:

$date = new DateTime('2011-12-25');  // make a new DateTime instance with the starting date

$day = $date->format('l');           // get the name of the day we want

$date->sub(new DateInterval('P1Y')); // go back a year
$date->modify('next ' . $day);       // from this point, go to the next $day
echo $date->format('Ymd'), "\n";     // ouput the date

答案 1 :(得分:4)

$newDate = '2011-12-19';

date_default_timezone_set('UTC');
$newDate = strtotime($newDate);
$oldDate = strtotime('last year', $newDate);
$oldDate = strtotime(date('l', $newDate), $oldDate);

$dateFormat = 'Y-m-d l w W';

echo "This date: ", date($dateFormat, $newDate), "\n"; 
echo "Old date : ", date($dateFormat, $oldDate);

这给出了:

This date: 2011-12-19 Monday 1 51
Old date : 2010-12-20 Monday 1 51

答案 2 :(得分:2)

使用strtotime()获取去年同一周的日期。

使用格式{$ year} -W {$ week} - {$ weekday},如下所示:

echo date("Y-m-d", strtotime("2010-W12-1"));

你可以做到这一点很长一段时间你不想:

<?php

  for($i = 2011; $i > 2000; $i--)
    echo date("Y-m-d", strtotime($i."-W12-1"));

?>

答案 3 :(得分:2)

让它变得更容易:)

echo date('Y-m-d (l, W)').<br/>;
echo date('Y-m-d (l, W)', strtotime("-52 week"));

编辑:我忘了写输出:: :)

2015-05-06 (Wednesday, 19)
2014-05-07 (Wednesday, 19)