Jawaban:
Membutuhkan 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");
}
Ini akan menampilkan semua hari dalam periode yang ditentukan antara $start
dan $end
. Jika Anda ingin memasukkan tanggal 10, atur $end
ke tanggal 11. Anda dapat menyesuaikan format sesuai keinginan Anda. Lihat Manual PHP untuk DatePeriod .
$begin->setTime(0,0); $end->setTime(12,0);
atau menginisialisasi dengan waktu hari dari tanggal mulai karena setiap waktu lebih lama dari tanggal akhir akan termasuk tanggal akhir dalam loop. Bukan perbaikan yang paling bergaya, tapi itu pilihan terbaik selama tidak ada bendera yang tepat.
Ini juga termasuk tanggal terakhir
$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");
}
Jika Anda tidak perlu kencan terakhir hapus saja =
dari kondisinya.
$begin
akan berbeda setelah pengulangan. Loop ini memodifikasi objek yang dibuat oleh new DateTime( "2015-07-03" )
. Karenanya mengapa Anda harus menggunakan versi DateTimeImmutable. Tetapi Anda perlu beberapa modifikasi lebih lanjut untuk menggunakannya.
Mengubah ke unix cap waktu membuat melakukan matematika tanggal lebih mudah di 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
}
Saat menggunakan PHP dengan zona waktu yang memiliki DST, pastikan untuk menambahkan waktu yang bukan 23:00, 00:00 atau 1:00 untuk melindungi dari berhari-hari melewatkan atau mengulangi.
Salin dari sampel php.net untuk rentang inklusif :
$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);
atau
$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);
Ini adalah satu lagi sederhana -
/**
* 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;
}
Contoh:
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
)
Pengguna fungsi ini: -
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;
}
Panggilan penggunaan / fungsi: -
Meningkat satu hari: -
dateRange($start, $end); //increment is set to 1 day.
Tingkatkan Bulan: -
dateRange($start, $end, "+1 month");//increase by one month
gunakan parameter ketiga jika Anda ingin mengatur format tanggal: -
dateRange($start, $end, "+1 month", "Y-m-d H:i:s");//increase by one month and format is mysql datetime
ini caranya:
$date = new Carbon();
$dtStart = $date->startOfMonth();
$dtEnd = $dtStart->copy()->endOfMonth();
$weekendsInMoth = [];
while ($dtStart->diffInDays($dtEnd)) {
if($dtStart->isWeekend()) {
$weekendsInMoth[] = $dtStart->copy();
}
$dtStart->addDay();
}
Hasil $ weekendsInMoth adalah serangkaian hari akhir pekan!
$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"));
}
Anda dapat mengulangi seperti ini juga, Ini $_POST['date']
dapat lekukan dari aplikasi atau situs web $_POST['date']
Anda. Selain itu, Anda juga dapat menempatkan string di sini "21-12-2019"
. Keduanya akan bekerja.
Jika Anda menggunakan Laravel dan ingin menggunakan Karbon, solusi yang benar adalah sebagai berikut:
$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");
}
Ingatlah untuk menambahkan:
<?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)));
}
?>