PHP 怎麼列出來某一個日期距離現在的日期

來源:互聯網
上載者:User
比如
$aa="2013-12-25";
$bb=time();
我想列出2013-12距離現在的月份

array(12) {
[1] => string(6) "2013-12"
[2] => string(6) "2014-1"
[3] => string(6) "2014-2"
[4] => string(6) "2014-3"
[5] => string(6) "2014-...."
}

現在只能列出當年的當前月份
for ($i = 1; $i <= date('m'); $i++) {
$dates[$i] = date('Y-'.$i, strtotime(date("Y-m-d")));
}

回複內容:

比如
$aa="2013-12-25";
$bb=time();
我想列出2013-12距離現在的月份

array(12) {
[1] => string(6) "2013-12"
[2] => string(6) "2014-1"
[3] => string(6) "2014-2"
[4] => string(6) "2014-3"
[5] => string(6) "2014-...."
}

現在只能列出當年的當前月份
for ($i = 1; $i <= date('m'); $i++) {
$dates[$i] = date('Y-'.$i, strtotime(date("Y-m-d")));
}

先說感想吧

  • 這種“要知道迴圈多少次略有困難”的問題用while會讓邏輯清晰不少
  • strtotime大殺器
  • PHP4.3+
  • //My Code又短又清楚,哼
php//http://3v4l.org/vuef4function monthToToday($past, $now, $format = 'Y-m') {    $current = strtotime(date('Y-m-1', strtotime($past)));    $result = array();    while($current < $now) {        $result[] = date($format, $current);        $current = strtotime('+1 month', $current);    }    //包含當前月份    $result[] = date($format, $current);    return $result;}print_r(monthToToday('2013-12-25', time()));die;

兩者時間戳記相減

 $monthDiffed) {        $m = $month;        $month = $monthDiffed;        $monthDiffed = $m;    }    $monthDiffed = $monthDiffed->modify("last day of -1 month");    $month = $month->modify("first day of +1 month");    $result = array();    while($month <= $monthDiffed) {        $result[] = $month->format( $format );        $month = $month->modify("+1 month");    }    return $result;}print_r( diffMonth("2014-6") );print_r( diffMonth("2014-6", "Y/m", "2013-6") );

$aa="2003-02-25";$bb = date("Y-m-d",time());function datediffage($before, $after) {    $b = getdate($before);    $a = getdate($after);$y=$m=0;if ($a['mon']==1) { //1月,借年    $y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12;}else {    if ($a['mon']>=$b['mon']+1) { //借月後,月相減為正        $y=$a['year']-$b['year'];$m=$a['mon']-$b['mon']-1;    }    else { //借月後,月相減為負,借年        $y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12-1;    }}$datearr = array();$totalm = "";if( $y > 0 ){    $totalm = $y*12;//大於1年,轉換成月份數}$totalm += $m;for ($i=0; $i < $totalm; $i++) {     array_push($datearr, date("Y-m",mktime(0,0,0,$b['mon']+$i,$d,$b['year'])));}return $datearr;

}

print_r(datediffage(strtotime($aa),strtotime($bb)));

圓代碼來自:http://my.oschina.net/u/223350/blog/293687
感謝原作者,有修改。

echo (new DateTime('2013-12'))->diff(new DateTime(date('Y-m')))->format('%y year %m month %d days');

結果是從目標時間到今天已經過去幾年幾月幾天

年x12+month = 已經過去幾個月

$date = new DateTime('2013-12');$now = date('Ym');$months = array();while ($date->format('Ym')<=$now) {    array_push($months, $date->format('Y-m'));    $date->modify('+1 month');}print_r($months);

擷取目標時間到現在的月份詳情

$aa = '2013-12-25';
$a = strtotime($aa);
$b = array();
while($a $b[] = date('Y-m',$a);
$a = strtotime('+1 month',$a);
}
var_dump($b);

寫完發現和mcfog思路差不多

這個問題貌似都有問題啊,
時間差出來了,那麼,你一個月是按28天算,還是30天或31天算呢?
年是按365天還是366天算呢?

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.