определить дату четвертой субботы текущего месяца - PullRequest
5 голосов
/ 13 февраля 2009

Немного застрял о том, как это сделать. Учитывая текущий месяц, мне нужно возвращать дату четвертой субботы каждого месяца.

например. Этот месяц будет 20 февраля, следующий будет 27 марта.

Спасибо

Ответы [ 6 ]

7 голосов
/ 13 февраля 2009

Вы можете использовать strtotime , чтобы найти «следующую субботу» на основе даты начала. Если этой датой начала является день, предшествующий как можно более раннему (21-му) предшествующему дню, мы получаем ответ ...

//required year/month
$yyyymm="2009-01";

//find next saturday after earliest possible date
$t=strtotime("next saturday", strtotime("{$yyyymm}-21"));

//here you go!
echo "4th saturday of $yyyymm is ".strftime("%Y-%m-%d",$t)."\n";

Самое раннее 4-е повторение дня в любом месяце - 22-е (1,8,15,22), последнее возможное 4-е повторение - 28-е (7,14,21,28).

РЕДАКТИРОВАТЬ : Хотя это не ясно из документации, вы также можете запросить "четвертую субботу" - используйте нулевой день месяца в качестве основы:

$t=strtotime("fourth saturday", strtotime("{$yyyymm}-00"));

или опустите базовое время и укажите месяц и год напрямую:

$t=strtotime("fourth saturday feb 2009");

Наконечник шляпы Робину "Я не PHP-кодер" День, чтобы заметить, что:)

7 голосов
/ 13 февраля 2009

Я не программист PHP, однако, кажется, strtotime - это то, что вам нужно.

Вы можете использовать strtotime («четвертая суббота»), и он вернет 4-ую субботу.

Проверьте документы strtotime.

EDIT:

Просто чтобы завершить ответ, благодаря Тому и Полу Диксону

date('dS F',strtotime('Fourth Saturday '.date('F o'))); 
3 голосов
/ 13 февраля 2009

Самая ранняя дата четвертой субботы - 22-е число месяца. Итак, посмотрите на 22-е число, посмотрите, какой это день недели, если это не суббота, добавьте один день к дате и проверяйте снова, пока не найдете соответствие (максимум, которое вам нужно будет проверить, составляет 6 дней).

2 голосов
/ 13 февраля 2009

Найдите первую субботу месяца, а затем добавьте к ней три недели.

Если вы не знаете, когда наступила первая суббота (или, точнее, не знаете точно дату, соответствующую названию дня), вы можете посмотреть на алгоритм Судного дня , Я удобно посмотрел на другой пост с несколько похожей проблемой.

0 голосов
/ 13 февраля 2009
function fourth_saturday($year, $month)
{
    $info = localtime(mktime(0, 0, 0, $month , 1, $year));
    return 28 - $info[6];
}
0 голосов
/ 13 февраля 2009

в PHP, а не псевдокод (думаю, требуется 5.2)

$date = getdate();
$date-> setDate($date->format('Y'), $date->format('Y'), '1');   // 1st of month.  
while ($date->format('w' != 6)
    $date->modify("+1 day");
$date->modify("+21 day"); // date is now on the fourth saturday
...