Эффективно работать в ближайшие выходные


Это эффективный способ сделать это?

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

function get_weekend(){
        $start = time();
        $day = date('w',$now);

        //find friday, without going past Sunday
        while ($day < 5 && $day > 0){
            $start = $start + 86400;
            $day = date('w',$start);
        }

        //find nearest sunday to start date
        $end = $start;
        while ($day != 0){
            $end = $end + 86400;
            $day = date('w',$end);
        }
        $weekend['StartDate']=date("d-F-Y",$start);
        $weekend['EndDate'] = date("d-F-Y",$end);
        return $weekend;

    }


907
1
php
задан 8 сентября 2011 в 09:09 Источник Поделиться
Комментарии
2 ответа

Нет необходимости в то время как петли - просто математикой:

function get_weekend()
{
$start = time();
$end = $start;
$day = date('w', $start);

if ($day > 0 && $day < 5)
{
$start = $time()+ ((5 - $day) * 86400);
}

if ($day != 0)
{
$end = time() + (7 - $day) * 86400;
}

$weekend['StartDate'] = date('d-F-Y', $start);
$weekend['EndDate'] = date('d-F-Y', $end);

return $weekend;
}

Редактировать: оказалось, было лучшим способом для вычисления $конец;

Редактировать: найти лучше код:

function get_weekend()
{
$start = time();
$end = $start;
$day = date('w', $start);

if ($day > 0)
{
if ($day < 5)
{
$start += ((5 - $day) * 86400);
}

$end += (7 - $day) * 86400;
}

$weekend['StartDate'] = date('d-F-Y', $start);
$weekend['EndDate'] = date('d-F-Y', $end);

return $weekend;
}

1
ответ дан 8 сентября 2011 в 12:09 Источник Поделиться

Короткая, короткая версия:

function get_weekend()
{
$fri = strtotime('friday');
$sun = strtotime('sunday');
// strtotime('friday') will be after strtotime('sunday') if it is after 0:00 Friday
// and before 0:00 on Sunday
$start = $sun < $fri? now():$fri;
$weekend = array();
$weekend['StartDate'] = date('d-F-Y', $start);
$weekend['EndDate'] = date('d-F-Y', $end);
return $weekend;
}

2
ответ дан 8 сентября 2011 в 01:09 Источник Поделиться