Отследить НГ в php

Рейтинг: 1Ответов: 2Опубликовано: 20.01.2015

Доброго всем здравия после НГ праздников.
Возникла мысль, автоматизировать функционал.
Показывать определённые блоки в период НГ праздников.
Пошёл через:


$curent_date=date("d.m.y");
$ng_start_date_bef="20.12.".date("y"); // 20 декабря текущего года
$ng_start_date_aft="20.12.".date("y");
date_modify($ng_start_date_aft, "-1 year");  // это дата для, после того как прошёл НГ, т.е. прошлогодний год.
.... // и тут я запутался... ведь до НГ надо чтобы дата до НГ была = "текущему году", а после стала "текущий-1"!
$ng_end_date="20.01.".date("y"); //20 января, завершение праздников.
//А после новогодняя дата, до НГ должна была становиться "текущий год+1", а после НГ, соответственно дата="текущий"...

Я пришёл к выводу, что если бы это было посередине года, то нет проблем отследить промежуток даты...
А тут я вижу простым решением не обойтись. Или я не прав?

Ответы

▲ 2Принят

Я не писал код, так как считаю, что это примитивный код и его можно написать за пару минут. Но посмотрев на код @alexsis20102, я понял, почему недолюбливают php программистов.

Вот код, с всей обвязкой он сильно меньше вышеприведенного.

<?php

//$cd = strtotime('2015-02-20'); // текущая дата для ручного ввода
$cd = date("y-m-d"); // просто текущая дата

$ng_stop=strtotime(date("y-01-20")); // дата, когда заканчиваются НГ праздники
$ng_start=strtotime(date("y-12-20")); // дата, когда начинаются праздники

if ($ng_start >= $cd and $cd > $ng_stop) { // собственно условие
    echo "не НГ\n";
} else {
    echo "а это НГ\n";
}

?>
▲ 0

задачу решить очень просто с помощью следующих манипуляций

$dateson = "20.12.2014"; //Дата начала показа
$datefinish =  date("Y-m-d",strtotime($dateson)+60*60*24*30);// Дата окончания в примере к дате начала прибавляем 30 дней
//Пишем условие показа блока
if(date('Y-m-d') < $datefinish) // Тут проверяем если текущая дата меньше финишной то показываем блок
{
 //код нужного бока
}

Если нужно динамическое определения нового или старого года то можно придумать условие для него но проще стартовую дату вынести в файл конфигурации и в ручную ее обновлять.

условие для автоматического определения года

$year = date('Y-m-d'); 
$yearon =  date("Y",strtotime($year)-60*60*24*30);
if($yearon != date('Y'))
{
   // Тут мы определили что если от текущий даты отнять 30 дней то год не равен текущему а это означает что он меньше можно полученое значение $yearon подставить в дату начала показа болка

}

Таким образом окончательная версия скрипта может выглядеть так

$year = date('Y-m-d'); 
$yearon =  date("Y",strtotime($year)-60*60*24*30);
if($yearon != date('Y'))
{
   $god = $yearon;
}
else
{
   $god = date('Y');
}

 $dateson = "20.12.".$god; //Дата начала показа
$datefinish =  date("Y-m-d",strtotime($dateson)+60*60*24*30);// Дата окончания в примере к дате начала прибавляем 30 дней
//Пишем условие показа блока
if(date('Y-m-d') < $datefinish) // Тут проверяем если текущая дата меньше финишной то показываем блок
{
 //код нужного бока
}