जवाबों:
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");
}
यह सभी दिनों के बीच $start
और निर्धारित अवधि में आउटपुट करेगा $end
। यदि आप 10 वीं को शामिल करना चाहते हैं, तो $end
11 वीं तक सेट करें। आप अपनी पसंद के अनुसार प्रारूप को समायोजित कर सकते हैं। DatePeriod के लिए PHP मैनुअल देखें ।
$begin->setTime(0,0); $end->setTime(12,0);
या प्रारंभ तिथि के दिन के समय के साथ आरंभ करने की समाप्ति तिथि की तुलना में बाद में किसी भी समय लूप में अंतिम तिथि शामिल होगी। सबसे स्टाइलिश फिक्स नहीं है, लेकिन यह सबसे अच्छा विकल्प है जब तक कि एक उचित झंडा न हो।
इसमें अंतिम तिथि भी शामिल है
$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");
}
यदि आपको अंतिम तिथि की आवश्यकता नहीं है तो बस =
शर्त को हटा दें ।
$begin
होगा । यह लूप द्वारा बनाई गई वस्तु को संशोधित करता है । इसलिए आप DateTimeImmutable संस्करणों का उपयोग क्यों करना चाहिए। लेकिन आपको उनका उपयोग करने के लिए कुछ और संशोधनों की आवश्यकता है। new DateTime( "2015-07-03" )
यूनिक्स टाइमस्टैम्प में बदलने से 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
}
डीएसटी वाले टाइमज़ोन के साथ पीएचपी का उपयोग करते समय, ऐसे समय को जोड़ना सुनिश्चित करें जो स्किपिंग या दोहराए जाने वाले दिनों से बचाने के लिए 23:00, 00:00 या 1:00 नहीं है।
समावेशी रेंज के लिए php.net नमूने से कॉपी :
$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);
या
$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);
यहाँ एक और सरल है -
/**
* 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;
}
उदाहरण:
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
)
उपयोगकर्ता इस समारोह: -
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;
}
उपयोग / फ़ंक्शन कॉल: -
एक दिन बढ़ाएँ: -
dateRange($start, $end); //increment is set to 1 day.
माह से वृद्धि: -
dateRange($start, $end, "+1 month");//increase by one month
यदि आप दिनांक प्रारूप सेट करना चाहते हैं तो तीसरे पैरामीटर का उपयोग करें: -
dateRange($start, $end, "+1 month", "Y-m-d H:i:s");//increase by one month and format is mysql datetime
यहाँ एक तरीका है:
$date = new Carbon();
$dtStart = $date->startOfMonth();
$dtEnd = $dtStart->copy()->endOfMonth();
$weekendsInMoth = [];
while ($dtStart->diffInDays($dtEnd)) {
if($dtStart->isWeekend()) {
$weekendsInMoth[] = $dtStart->copy();
}
$dtStart->addDay();
}
$ सप्ताहांत का परिणाम है। दोनों सप्ताहांत दिनों की सरणी है!
$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"));
}
आप इसे इस तरह से भी टाइप कर सकते हैं, $_POST['date']
आपके ऐप या वेबसाइट से सेंध लगाई जा सकती है , इसके बजाय $_POST['date']
आप यहां अपना स्ट्रिंग भी रख सकते हैं "21-12-2019"
। दोनों काम करेंगे।
यदि आप लारवेल का उपयोग करते हैं और कार्बन का उपयोग करना चाहते हैं तो सही समाधान निम्नलिखित होगा:
$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");
}
जोड़ना याद रखें: