2016-05-03 4 views
0

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

Я хочу сделать петлю с определенной даты, до сегодняшнего дня.

Что в настоящее время происходит с приведенным ниже кодом, так это то, что он не останавливается и просто продолжает двигаться. Когда я регистрирую i, я могу видеть, что дата увеличивается на один день, как следует. Я также попытался перевернуть оператора на <, но это заставило цикл полностью пропустить.

Любые идеи?

$startOfPlayoffs = new DateTime("2016-04-29"); 
$today = date("Y-m-d"); 

     for($i = $startOfPlayoffs; $i >= $today; $i->modify('+1 day')) 
     { 
     //... some stuff 
     } 

Интересно, что когда я скорректирую дату, он отлично работает. I.E:

$endOfPlayoffs = new DateTime("2016-05-02"); 

Это не идеальный вариант, поэтому надеялся заставить его работать должным образом.

+0

Initialize '$ today' как' DateTime' объекта. Как бы то ни было, это всего лишь строка – WillardSolutions

+0

проверяет, что формат даты возвращает строку, сопоставимую с вашей датой начала ... –

ответ

2

Вы сравниваете объект PHP Date ($ startOfPlayoffs) со строкой ($ today). Попробуйте преобразовать $ сегодня в Дата объекта:

$startOfPlayoffs = new DateTime("2016-04-29"); 
$today = new DateTime(); 
$cpt = 0; 
for($i = $startOfPlayoffs; $i <= $today; $i->modify('+1 day')){ 
    echo time($i) . "<br>"; 
    if ($cpt++ >= 100) exit;// as a safeguard 
} 
+0

Спасибо, это сработало отлично! – John

1

unix time stamps, это конкретные номера, с которыми гораздо легче справиться.

int time(void) //current time stamp 

Вы также можете использовать strtotime() для преобразования date strings into time stamps. См. this question для преобразования из пронумерованных форматов даты в временные метки unix.

0

Используйте ->diff() метод класса DateTime как это довольно чистый

Метод ->diff() производит DateInterval объект, который выглядит как этот

DateInterval Object 
(
    [y] => 0 
    [m] => 3 
    [d] => 4 
    [h] => 17 
    [i] => 23 
    [s] => 4 
    [weekday] => 0 
    [weekday_behavior] => 0 
    [first_last_day_of] => 0 
    [invert] => 0 
    [days] => 95 
    [special_type] => 0 
    [special_amount] => 0 
    [have_weekday_relative] => 0 
    [have_special_relative] => 0 
) 

Таким образом, код может быть таким же простым, как этот

<?php 
    $startOfPlayoffs = new DateTime("2016-01-29"); 
    $today= new DateTime(); 
    $diff = $startOfPlayoffs ->diff($today); 

    for ($i = 0; $i<$diff->days; $i++) { 

     // do stuff 
    } 
0

использование: date_format($startOfPlayoffs,"Y-m-d") для получения "переменной" можно сравнить с ...

$startOfPlayoffs = new DateTime("2016-04-29"); 
$today = date("Y-m-d"); 

    for($i = date_format($startOfPlayoffs,"Y-m-d"); $i >= $today; $i->modify('+1 day')) 
    { 
    //... some stuff 
    } 
Смежные вопросы