2015-02-07 3 views
0

Наш расчетный цикл - 1-й и 16-й числа каждого месяца. Мы хотим показать нашим пользователям следующую дату выплаты. Хо, чтобы продолжить его с PHP?Ближайшая дата в PHP

Для например: Сегодня 7 февраля ... так 16-го февраля следует указывать как выход.

+0

.. арифметика? : P – Kroltan

ответ

1

Мы должны принять случаи ухода, как 17 декабря, так как мы должны вернуться 1 января. Следующий фрагмент кода рассчитывает следующую дату платежа:

date_default_timezone_set('UTC'); 
list($day, $month, $year) = array_map('intval', explode(',', date('j,m,Y'))); 
if ($day < 16) 
    $day = 16; 
else { 
    $day = 1; 
    $month = $month % 12 + 1; 
    if ($month == 1) $year += 1; 
} 
echo date(DATE_RFC2822, mktime(0, 0, 0, $month, $day, $year)); 

Это выход на текущую дату:

Mon, 16 Feb 2015 00:00:00 +0000 
4
function get_payout_date($today, $payout_dates) { 
    foreach ($payout_dates as $d) { 
     if ($d > $today) return $d; 
    } 

    return $payout_dates[0]; 
} 

$payout_dates = array(1, 16); 
echo get_payout_date(intval(date('d')), $payout_dates); 

И если вы хотите, чтобы ту же дату, вы можете использовать $d >= $today.

Вы хотите получить полную дату с даты выплаты, то:

$payout_date = get_payout_date(intval(date('d')), $payout_dates); 
$date = date('jS M, Y', strtotime(date('Y-m-') . $payout_date)); 
echo $date; 

Выход: 16 февраля, 2015

+0

Ваш код имеет очень высокую сложность для такой простой проблемы. –

+0

Да, ваш ответ хорош для этого случая, но что, если завтра мои выплаты будут 1, 3, 6, 10, 15, 24? – Ananth

+0

Да, это правда. Ваш код более гибкий. Но вы знаете, что я отвечаю на вопрос. Я проголосую за ваше решение. –

-1

Hei Как вы цикла ваш оплаты? mothly? вы можете использовать

$next30day=date('Y-m-d', strtotime("+30 days")); 

$ next30day должен иметь следующий 30 день текущей даты

2

Просто если:

$currentDay = date('j'); 

if ($currentDay >= 1 && $currentDay <= 16) { 
    echo '16th'; 
} else { 
    echo '1st'; 
} 
Смежные вопросы