php - найти дату того же дня недели в прошлом году - PullRequest
5 голосов
/ 20 декабря 2011

Итак, в PHP я пытаюсь вернуть значение даты за прошлый год, основываясь на том же дне недели.Пример: (понедельник) 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 (суббота даты прошлого года) и возвращается сзначение Т-6.Ввод IE 2011-12-25 дает вам 2010-12-19 вместо 2011-12-26.

Я немного озадачен тем, что нашел в php хорошее решение, которое будет работать в течение високосных лет и, очевидно, всехдни недели.

Есть предложения?

Спасибо!

Ответы [ 4 ]

9 голосов
/ 20 декабря 2011

Как насчет этого, используя 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
4 голосов
/ 20 декабря 2011
$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 голосов
/ 06 мая 2015

Сделай проще

2 голосов
/ 20 декабря 2011

Используйте 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"));

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...