Как найти ближайший ближайший день недели в PHP, если изначально у меня есть строка даты, например: 07.05.2010
? Например, я хочу найти ближайшее воскресенье (или любой день недели). Как я могу это реализовать? БлагодаряКак найти ближайший день недели в php?
ответ
Это должно сделать:
echo date('d.m.Y', strtotime('next Sunday', strtotime('07.05.2010')));
Не, если последний является форматом немецкого формата MM.DD.YYYY - strtotime будет винт, что вверх. Вам нужно будет найти решение для этого, чтобы получить мое преимущество :) –
Плюс, не забудьте проверить края. Что произойдет, если сам 07.05.2010 - воскресенье? –
«Следующее воскресенье» не обязательно «ближайшее воскресенье» – Dolph
Только в случае, если вы хотели ближайший день, а не следующего один, вот способ сделать что.
$target = "Sunday";
$date = "07.05.2010";
// Old-school DateTime::createFromFormat
list($dom, $mon, $year) = sscanf($date, "%02d.%02d.%04d");
$date = new DateTime("$year/$mon/$dom -4 days");
// Skip ahead to $target day
$date->modify("next $target");
echo $date->format("d.m.Y");
И, как PHP 5.3, что средняя часть может быть просто
$date = DateTime::createFromFormat("!d.m.Y", $date)
->modify("-4 days")->modify("next $target");
Есть несколько ответов Отправленных, и я продолжаю видеть решение, которые могли бы дать мне ни следующего экземпляра дня неделя или предыдущий пример но не самый близкий. Чтобы решить эту проблему, я пришел с этой функцией:
function closestDate($day){
$day = ucfirst($day);
if(date('l', time()) == $day)
return date("Y-m-d", time());
else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day)))
return date("Y-m-d", strtotime('next '.$day));
else
return date("Y-m-d", strtotime('last '.$day));
}
ввода: день недели («Воскресенье», «Понедельник», и т.д.)
Выход: Если бы я попросил ближайший " Воскресенья «и сегодня:
- „воскресенье“: Я получу сегодняшнюю дату
- „Понедельник“: Я получу вчерашнюю дату
- » суббота: Я получу завтрашнюю дату
Надеется, что это помогает :)
Это может быть сделано с использованием только strtotime()
и немного хитрости.
function findNearest($day, $date)
{
return strtotime("next $day", strtotime("$date - 4 days"));
}
echo date('d.m.Y', findNearest("Sunday", "07.05.2010")); // 09.05.2010
echo findNearest("Sunday", "07.05.2010"); // 1273377600
echo date('d.m.Y', findNearest("Sunday", "09.05.2010")); // 09.05.2010
echo findNearest("Sunday", "09.05.2010"); // 1273377600
echo date('d.m.Y', findNearest("Sunday", "05.05.2010")); // 02.05.2010
echo findNearest("Sunday", "05.05.2010"); // 1272772800
Вы можете использовать библиотеку Carbon, а
$date = Carbon::create(2015, 7, 2); // 2015-07-02
// To get the first day of the week
$monday = $date->startOfWeek(); // 2015-06-29
$mondayTwoWeeksLater = $date->addWeek(2); // 2015-07-13
/**
*
* @param \DateTime $date
* @param $dayOfWeek - e.g Monday, Tuesday ...
*/
public function findNearestDayOfWeek(\DateTime $date, $dayOfWeek)
{
$dayOfWeek = ucfirst($dayOfWeek);
$daysOfWeek = array(
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday',
);
if(!in_array($dayOfWeek, $daysOfWeek)){
throw new \InvalidArgumentException('Invalid day of week:'.$dayOfWeek);
}
if($date->format('l') == $dayOfWeek){
return $date;
}
$previous = clone $date;
$previous->modify('last '.$dayOfWeek);
$next = clone $date;
$next->modify('next '.$dayOfWeek);
$previousDiff = $date->diff($previous);
$nextDiff = $date->diff($next);
$previousDiffDays = $previousDiff->format('%a');
$nextDiffDays = $nextDiff->format('%a');
if($previousDiffDays < $nextDiffDays){
return $previous;
}
return $next;
}
В качестве альтернативы вы можете создать карту в какие дни недели ближе, например, если вы после ближайшего понедельника по среду, она было бы быстрее найти предыдущий понедельник, учитывая, что он ближе, чем в следующий понедельник.
- 1. Найти ближайший последний день недели
- 2. Как найти Ближайший (день недели) на заданную дату
- 3. Как найти день недели?
- 4. PHP день недели числового день недели текст
- 5. Получить ближайший день определенного дня недели
- 6. Найти день недели
- 7. Получите день недели в PHP
- 8. найти День недели определенной даты
- 9. Как найти день недели с даты с помощью PHP?
- 10. Как найти день недели с данной даты?
- 11. Как найти день недели из timestamp
- 12. Как найти ближайший FRI?
- 13. Найти текущий день недели в C# ASP.Net
- 14. найти последний день недели в php4.0
- 15. день недели в Java
- 16. Как вывести день недели на PHP?
- 17. Как получить день недели с помощью PHP?
- 18. Как день недели с отметкой времени PHP
- 19. PHP найдет ближайший конкретный день на сегодняшний день
- 20. Как начать день недели?
- 21. Как получить день недели?
- 22. Ближайший день в массиве sql
- 23. Показать день недели в PHP из области
- 24. Неправильный день недели возвращаемой даты в PHP
- 25. Поиск Первый день недели с помощью PHP
- 26. как найти день недели будущей даты как 12-25-2049
- 27. Определить день недели данной недели
- 28. Установить день недели на немецкий в PHP
- 29. PHP метка время - первый день недели
- 30. день недели в Sql
Вы просите алгоритм? Если да, можете ли вы указать требуемый ввод/вывод? – Dolph
Да, хотя – moogeek
Вы можете найти это решение интересным: http://is.gd/bXrha – nuqqsa