如何find两个指定date之间的date?
如果我在两个文本框中有两个date20-4-2010和22-4-2010,我想date是这样的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('dm-Y', $current); }
10:00
部分是为了防止代码跳过或重复一天由于夏令时。
通过给予天数:
for($i = 0; $i <= 2; $i++) { echo date('dm-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( 'dmY' ); }
你可以使用mktime()
。
mktime()对于date算术和validation很有用,因为它会自动计算超出范围input的正确值。
如果你增加date的数字,你会得到一个有效的date,即使你超过月底:
<?php $day= 25; $dateEnd = mktime(0,0,0,5,3,2010); do { $dateCur = mktime(0,0,0,4,$day,2010); $day++; print date( 'dm-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
你可以做:
$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
试试这个,希望它有助于帮助
$begin = date("Ymd", strtotime($date); $end = date("Ymd", strtotime($date)); $begin = new DateTime($begin); $end = new DateTime($end); for ($i = $begin; $i <= $end; $i=$i->modify('+1 day')) { echo $i->format('Ym-d'); }
/** * Function to list of weeks start and end. * @param string strDateFrom (Date From "YYYY-MM-DD") * @param string strDateTo (Date To "YYYY-MM-DD") * @return array weeks */ function getWeeksBetweenTowDates($date_from, $date_to) { $startweek = $current_week = date("W", strtotime($date_from)); $endweek = date("W", strtotime($date_to)); $current_year = date("Y", strtotime($date_from)); $current_yearweek = date("Y", strtotime($date_from)) . $startweek; $end_yearweek = date("Y", strtotime($date_to)) . $endweek; $start_day = 0; $end_day = 0; while ($current_yearweek <= $end_yearweek) { $dto = new DateTime(); if ($start_day == 0) { $start_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 0)->format('Ym-d'); $end_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 6)->format('Ym-d'); } else { $start_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 0)->format('Ym-d'); $end_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 6)->format('Ym-d'); } $arr_weeks[sprintf("%02d", $current_week)] = $start_day . " =>" . $end_day; $last_yearweek_in_year = $current_year . date("W", strtotime('31-12-' . $current_year)); if ($current_yearweek == $last_yearweek_in_year) { //last week in the year $current_week = 1; $current_year = ($current_year + 1); } else { $current_week = ($current_week + 1); } $current_yearweek = $current_year . sprintf("%02d", $current_week); } return $arr_weeks; }
运行如下:date_from = 2015-10-20,date_to = 2016-04-15
$arr_weeks = $this->getWeeksBetweenTowDates($date_from, $date_to);
输出:
Array ( [43] => 2015-10-18 =>2015-10-24 [44] => 2015-10-25 =>2015-10-31 [45] => 2015-11-01 =>2015-11-07 [46] => 2015-11-08 =>2015-11-14 [47] => 2015-11-15 =>2015-11-21 [48] => 2015-11-22 =>2015-11-28 [49] => 2015-11-29 =>2015-12-05 [50] => 2015-12-06 =>2015-12-12 [51] => 2015-12-13 =>2015-12-19 [52] => 2015-12-20 =>2015-12-26 [53] => 2015-12-27 =>2016-01-02 [01] => 2016-01-03 =>2016-01-09 [02] => 2016-01-10 =>2016-01-16 [03] => 2016-01-17 =>2016-01-23 [04] => 2016-01-24 =>2016-01-30 [05] => 2016-01-31 =>2016-02-06 [06] => 2016-02-07 =>2016-02-13 [07] => 2016-02-14 =>2016-02-20 [08] => 2016-02-21 =>2016-02-27 [09] => 2016-02-28 =>2016-03-05 [10] => 2016-03-06 =>2016-03-12 [11] => 2016-03-13 =>2016-03-19 [12] => 2016-03-20 =>2016-03-26 [13] => 2016-03-27 =>2016-04-02 [14] => 2016-04-03 =>2016-04-09 [15] => 2016-04-10 =>2016-04-16 )