Antworten:
Benötigt PHP5.3:
$begin = new DateTime('2010-05-01');
$end = new DateTime('2010-05-10');
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);
foreach ($period as $dt) {
echo $dt->format("l Y-m-d H:i:s\n");
}
Dies gibt alle Tage im definierten Zeitraum zwischen $start
und aus $end
. Wenn Sie den 10. einschließen möchten, setzen Sie ihn $end
auf den 11. Platz. Sie können das Format nach Ihren Wünschen anpassen. Siehe PHP-Handbuch für DatePeriod .
$begin->setTime(0,0); $end->setTime(12,0);
oder das Initialisieren mit der Uhrzeit des Startdatums, da jede Zeit nach dem Enddatum das Enddatum in die Schleife einschließt. Nicht die eleganteste Lösung, aber die beste Option, solange es keine richtige Flagge gibt.
Dies beinhaltet auch das letzte Datum
$begin = new DateTime( "2015-07-03" );
$end = new DateTime( "2015-07-09" );
for($i = $begin; $i <= $end; $i->modify('+1 day')){
echo $i->format("Y-m-d");
}
Wenn Sie das letzte Datum nicht benötigen, entfernen Sie es einfach =
aus dem Zustand.
$begin
dies nach der Schleife anders sein wird. Diese Schleife ändert das von erstellte Objekt new DateTime( "2015-07-03" )
. Daher sollten Sie die DateTimeImmutable-Versionen verwenden. Sie benötigen jedoch einige weitere Modifikationen, um sie zu verwenden.
Das Konvertieren in Unix-Zeitstempel erleichtert die Datumsberechnung in PHP:
$startTime = strtotime( '2010-05-01 12:00' );
$endTime = strtotime( '2010-05-10 12:00' );
// Loop between timestamps, 24 hours at a time
for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
$thisDate = date( 'Y-m-d', $i ); // 2010-05-01, 2010-05-02, etc
}
Wenn Sie PHP mit einer Zeitzone mit Sommerzeit verwenden, müssen Sie eine Zeit hinzufügen, die nicht 23:00, 00:00 oder 1:00 ist, um sich vor Tagen zu schützen, die übersprungen oder wiederholt werden.
Kopie von php.net Beispiel für inklusive Bereich:
$begin = new DateTime( '2012-08-01' );
$end = new DateTime( '2012-08-31' );
$end = $end->modify( '+1 day' );
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
foreach($daterange as $date){
echo $date->format("Ymd") . "<br>";
}
$startTime = strtotime('2010-05-01');
$endTime = strtotime('2010-05-10');
// Loop between timestamps, 1 day at a time
$i = 1;
do {
$newTime = strtotime('+'.$i++.' days',$startTime);
echo $newTime;
} while ($newTime < $endTime);
oder
$startTime = strtotime('2010-05-01');
$endTime = strtotime('2010-05-10');
// Loop between timestamps, 1 day at a time
do {
$startTime = strtotime('+1 day',$startTime);
echo $startTime;
} while ($startTime < $endTime);
Hier ist noch eine einfache -
/**
* Date range
*
* @param $first
* @param $last
* @param string $step
* @param string $format
* @return array
*/
function dateRange( $first, $last, $step = '+1 day', $format = 'Y-m-d' ) {
$dates = [];
$current = strtotime( $first );
$last = strtotime( $last );
while( $current <= $last ) {
$dates[] = date( $format, $current );
$current = strtotime( $step, $current );
}
return $dates;
}
Beispiel:
print_r( dateRange( '2010-07-26', '2010-08-05') );
Array (
[0] => 2010-07-26
[1] => 2010-07-27
[2] => 2010-07-28
[3] => 2010-07-29
[4] => 2010-07-30
[5] => 2010-07-31
[6] => 2010-08-01
[7] => 2010-08-02
[8] => 2010-08-03
[9] => 2010-08-04
[10] => 2010-08-05
)
Benutzer diese Funktion: -
function dateRange($first, $last, $step = '+1 day', $format = 'Y-m-d' ) {
$dates = array();
$current = strtotime($first);
$last = strtotime($last);
while( $current <= $last ) {
$dates[] = date($format, $current);
$current = strtotime($step, $current);
}
return $dates;
}
Nutzungs- / Funktionsaufruf: -
Erhöhung um einen Tag: -
dateRange($start, $end); //increment is set to 1 day.
Erhöhung um Monat: -
dateRange($start, $end, "+1 month");//increase by one month
Verwenden Sie den dritten Parameter, wenn Sie das Datumsformat einstellen möchten: -
dateRange($start, $end, "+1 month", "Y-m-d H:i:s");//increase by one month and format is mysql datetime
Hier ist ein Weg:
$date = new Carbon();
$dtStart = $date->startOfMonth();
$dtEnd = $dtStart->copy()->endOfMonth();
$weekendsInMoth = [];
while ($dtStart->diffInDays($dtEnd)) {
if($dtStart->isWeekend()) {
$weekendsInMoth[] = $dtStart->copy();
}
$dtStart->addDay();
}
Das Ergebnis von $ weeksInMoth ist eine Reihe von Wochenendtagen!
$date = new DateTime($_POST['date']);
$endDate = date_add(new DateTime($_POST['date']),date_interval_create_from_date_string("7 days"));
while ($date <= $endDate) {
print date_format($date,'d-m-Y')." AND END DATE IS : ".date_format($endDate,'d-m-Y')."\n";
date_add($date,date_interval_create_from_date_string("1 days"));
}
Sie können auch so iterieren. Das $_POST['date']
kann von Ihrer App oder Website $_POST['date']
verbeult werden "21-12-2019"
. Stattdessen können Sie hier auch Ihre Zeichenfolge platzieren . Beides wird funktionieren.
Wenn Sie Laravel verwenden und Carbon verwenden möchten, ist die richtige Lösung die folgende:
$start_date = Carbon::createFromFormat('Y-m-d', '2020-01-01');
$end_date = Carbon::createFromFormat('Y-m-d', '2020-01-31');
$period = new CarbonPeriod($start_date, '1 day', $end_date);
foreach ($period as $dt) {
echo $dt->format("l Y-m-d H:i:s\n");
}
Denken Sie daran, hinzuzufügen:
<?php
$start_date = '2015-01-01';
$end_date = '2015-06-30';
while (strtotime($start_date) <= strtotime($end_date)) {
echo "$start_daten";
$start_date = date ("Y-m-d", strtotime("+1 days", strtotime($start_date)));
}
?>