2017-01-25 2 views
0

Я пытаюсь распечатать даты между двумя другими датами. Вот мой код:Печать даты между двумя другими датами на PHP

$begin = date("d/m/y"); 
$end = date("d/m/y", strtotime("+1 month")); 

$i = 0; 
while(strtotime($begin) <= strtotime($end)){ 

    echo "$begin\n"; 

    $i++; 
    $begin = date("d/m/y", strtotime("+$i day")); 

} 

Вы можете выполнить тот же самый код здесь: http://sandbox.onlinephpfunctions.com/code/34c4b721553038f585806798121941bee0c66086

По какой-то причине этот код печати только даты между 25/01/2017 и 31/01/2017 вместо 25/01/2017 и 25/02/2017. Я не знаю, что случилось. Кто-нибудь может мне помочь?

+0

Не поймите меня неправильно, но почему вы используете 'date()' здесь? Это можно сделать только с помощью 'strtotime()'. И вы будете называть меньше функций на итерации. – JustOnUnderMillions

ответ

2

strtotime() не поддерживает даты в формате d/m/y. Он рассматривает эти даты как m/d/y.

Чтобы исправить ваш код, используйте формат Y-m-d в первых двух строках.

На боковой панели я рекомендую использовать классы \DateTime для управления датами вместо строк и целых чисел. Подробнее читайте здесь: https://paulund.co.uk/datetime-php

+0

Так просто! Спасибо, мой друг. Это очень помогло! –

+0

'не поддерживает' не является правильным (' echo date ('Y-m-d', strtotime ('01/01/2017 ')); 'работает), это некорректно. Протестируйте его по ссылке песочницы. Если strtotime не поддерживает d/m/y, то почему первые даты корректны. Он становится сломанным, когда речь идет о переключателе месяца. – JustOnUnderMillions

+0

Да, он также работает для 'strtotime ('02/02/2017 ')', 'strtotime ('03/03/2017')' и так далее. Я оставлю это для вас, чтобы понять, почему. –

2
<?php 
error_reporting(-1); 
ini_set('display_errors', true); 

$begin = new DateTime(); 
$end = (new DateTime())->modify('+1 month'); 
$interval = DateInterval::createFromDateString('1 day'); 

$period = new DatePeriod($begin, $interval, $end); 

foreach ($period as $date) { 
    echo $date->format('d/m/y')."<br/>"; 
} 
Смежные вопросы