Если у меня есть две даты 20.04.2010 и 22.04.2010 в двух текстовых полях, и я хочу, чтобы даты были похожи на это 20, 21, 22. Как я получаю это?
Я почти уверен, что раньше на этот вопрос отвечали квадриллион раз, но в любом случае:
$start = strtotime('20-04-2010 10:00');
$end = strtotime('22-04-2010 10:00');
for($current = $start; $current <= $end; $current += 86400) {
echo date('d-m-Y', $current);
}
Часть 10:00
предназначена для предотвращения пропуска или повторения кода дня из-за перехода на летнее время.
Указав количество дней:
for($i = 0; $i <= 2; $i++) {
echo date('d-m-Y', strtotime("20-04-2010 +$i days"));
}
С PHP5.3
$period = new DatePeriod(
new DateTime('20-04-2010'),
DateInterval::createFromDateString('+1 day'),
new DateTime('23-04-2010') // or pass in just the no of days: 2
);
foreach ( $period as $dt ) {
echo $dt->format( 'd-m-Y' );
}
Вы можете:
$start = strtotime("2010-04-20"); // get timestamp for start date.
$end = strtotime("2010-04-22"); // get timestamp for end date.
// go from start timestamp to end timestamp adding # of sec in a day.
for($t=$start;$t<=$end;$t+=86400) {
// get the date for this timestamp.
$d = getdate($t);
// print the date.
echo $d['mday'].'-'.$d['mon'].'-'.$d['year']."\n";
}
Вывод:
20-4-2010
21-4-2010
22-4-2010
Вы можете использовать mktime ()
.
mktime () полезен для выполнения арифметических операций и проверки даты, поскольку он автоматически вычисляет правильное значение для ввода вне допустимого диапазона.
Если вы увеличите номер дня, вы получите действительную дату обратно, даже если вы пройдете конец месяца:
<?php
$day= 25;
$dateEnd = mktime(0,0,0,5,3,2010);
do {
$dateCur = mktime(0,0,0,4,$day,2010);
$day++;
print date( 'd-m-y', $dateCur) .'<br>';
} while ($dateCur < $dateEnd);
Вывод:
25-04-10
26-04-10
27-04-10
28-04-10
29-04-10
30-04-10
01-05-10
02-05-10
03-05-10