Yanıtlar:
PHP5.3 gerektirir:
$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");
}
Bu, $start
ve arasında belirtilen sürede tüm günleri çıktılar $end
. 10'u dahil etmek istiyorsanız, $end
11'e ayarlayın . Biçimi isteğinize göre ayarlayabilirsiniz. DatePeriod için PHP Kılavuzuna bakın .
$begin->setTime(0,0); $end->setTime(12,0);
veya başlangıç tarihinin günün saatiyle bitiş tarihinin bitiş tarihinden sonraki herhangi bir saatte başlangıç durumuna getirmek, bitiş tarihini döngüde içerecektir. En şık düzeltme değil, ancak uygun bir bayrak olmadığı sürece en iyi seçenektir.
Buna son tarih de dahildir
$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");
}
Son tarihe ihtiyacınız yoksa, sadece =
durumdan kaldırın .
$begin
bunun farklı olacağını unutmayın . Bu döngü, tarafından oluşturulan nesneyi değiştirir new DateTime( "2015-07-03" )
. Bu nedenle DateTimeImmutable sürümlerini kullanmalısınız. Ancak bunları kullanmak için başka değişikliklere ihtiyacınız var.
Unix zaman damgalarına dönüştürmek, php'de tarih matematiğini kolaylaştırır:
$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
}
PHP'yi DST içeren bir saat dilimiyle kullanırken, atlama veya yinelenen günlere karşı korumak için 23:00, 00:00 veya 1:00 olmayan bir zaman eklediğinizden emin olun.
Kapsayıcı aralık için php.net örneğinden kopyalayın :
$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);
veya
$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);
İşte bir başka basit -
/**
* 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;
}
Misal:
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
)
Bu işlevi kullan: -
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;
}
Kullanım / fonksiyon çağrısı: -
Bir gün artış: -
dateRange($start, $end); //increment is set to 1 day.
Aya Göre Artış: -
dateRange($start, $end, "+1 month");//increase by one month
tarih biçimini ayarlamak istiyorsanız üçüncü parametreyi kullanın: -
dateRange($start, $end, "+1 month", "Y-m-d H:i:s");//increase by one month and format is mysql datetime
İşte bir yol:
$date = new Carbon();
$dtStart = $date->startOfMonth();
$dtEnd = $dtStart->copy()->endOfMonth();
$weekendsInMoth = [];
while ($dtStart->diffInDays($dtEnd)) {
if($dtStart->isWeekend()) {
$weekendsInMoth[] = $dtStart->copy();
}
$dtStart->addDay();
}
$ WeekendsInMoth, hafta sonu günlerinin bir dizisidir!
$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"));
}
Bu şekilde de yineleyebilirsiniz $_POST['date']
, Uygulamanızdan veya web sitenizden göçük olabilir Bunun yerine $_POST['date']
dizenizi buraya da yerleştirebilirsiniz "21-12-2019"
. Her ikisi de işe yarayacak.
Laravel kullanıyorsanız ve Carbon kullanmak istiyorsanız doğru çözüm aşağıdaki gibi olur:
$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");
}
Eklemeyi unutmayın:
<?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)));
}
?>