PHP iki tarih arasındaki tüm ay ve yıl Listesi

6 Cevap php

Bunu anlamak kolaydır böylece ayrıntılarını açıklamak için çalışıyorum.

Ben ay ve yıl farkına dayalı ayın ve yılın bir listesini istiyorum.

I am implementing search functionality based on start month with year and end month with year. So!

start Selection - 01(month)-2009 (Yr)

End selection 10(month)-2009 (Yr)

Ne MySQL istiyorum:

Month                        Year
JAN                          2009
FEB                          2009
MAR                          2009
APR                          2009
MAY                          2009
JUN                          2009
JUL                          2009
AUG                          2009
SEP                          2009
OCT                          2009

6 Cevap

FractalizeR cevap doğru olanıdır.

Sadece bana fonksiyonlarını tanımlayarak genişletmek izin:

function GetMonthsFromDate($myDate) {
  $year = (int) date('Y',$myDate);
  $months = (int) date('m', $myDate);
  $dateAsMonths = 12*$year + $months;
  return $dateAsMonths;
}

function GetDateFromMonths($months) {
  $years = (int) $months / 12;
  $month = (int) $months % 12;
  $myDate = strtotime("$years/$month/01"); //makes a date like 2009/12/01
  return $myDate;
}

PS: tried to post as a comment but the formating got screwed. (Of course this functions could be rewritten as one liners but wanted to be more readable)

Although FractalizeR answer is the correct one. There is another option.

Doğru olanı yapmak ve 1 ay sileceğini - ki strtotime (1 ay ', '2009 / 08/01) olduğu gerçeğinden yararlanarak.

<?php
$startDate = strtotime("$startYear/$startMonth/01");
$endDate   = strtotime("$endYear/$endMonth/01");

$currentDate = $endDate;

while ($currentDate >= $startDate) {
    echo date('Y/m',$currentDate);
    $currentDate = strtotime( date('Y/m/01/',$currentDate).' -1 month');
}

Yine aylık bir listesi

Belirli tarih ve arka yana geçen ay bir dizi için tarih dönüştürmek için bazı fonksiyonlar yazmak gerekir. Örneğin, Ocak 1980 yılından bu yana.

Jan 1980 = 0;
Dec 1980 = 12;
Jan 1981 = 13 etc.

Sonra sadece döngü "için" basit do:

for ($i = GetMonthsFromDate($StartDate), $i <= GetMonthsFromDate($StopDate), $i++) {
   echo(GetDateFromMonths($i));
}

Burada çok büyük çalıştı son cevap

$startMonth= $_POST['startmonth'];
 	$startyear= $_POST['startyear'];
	$cYear = $startyear;

	$endMonth= $_POST['endmonth'];
	$endyear= $_POST['endyear'];
    $sql = "SELECT PERIOD_DIFF(".$endyear.$endMonth.", ".$startyear.$startMonth.")";
	$queryRS =  $db->query($sql);
	$tmonthsarray = $db->fetchRow($c_jobsVat);
	$totalmonths=tmonthsarray[0];
         for($count=$startMonth; $count <= ($startMonth + $totalmonths);$count++)
         {  
            $processYear = $startyear + intval( ( $count - 1 ) / 12 );
		$processMonth= (( $count - 1 ) % 12 + 1);
		$processMonthName= date('F', mktime(0,0,0,$count));
         }

Ben hepinizin girişi dayalı bu işlevi yazdı. Bu göz atın:

function CountTheMonth($startDate,$endDate,$order)
{
    $startDate = strtotime($startDate);
    $endDate   = strtotime($endDate);

    $ASC_Month = $startDate;
    $DESC_Month = $endDate;
    $Y_Axis = Array();

    if($order == 'DESC')//Big to small
    {
        while ($DESC_Month >= $startDate) 
        {    
            $Y_Axis[] = date('F-Y',$DESC_Month);
            $DESC_Month = strtotime( date('Y-m-d',$DESC_Month).' -1 month');
        }
        return $Y_Axis;
    }
    elseif($order == 'ASC')//Small to big
    {
        while ($ASC_Month <= $endDate) 
        {    
            $Y_Axis[] = date('F-Y',$ASC_Month);
            $ASC_Month = strtotime( date('Y-m-d',$ASC_Month).' +1 month');
        }
        return $Y_Axis;
    }
}

Sizin mantık aylık bir listesini almak için harika çalışıyor. Ama biz bu durumda yıllık başa nasıl emin.

İşte benim kod:

$startMonth= $_POST['startmonth'];

$startyear= $_POST['startyear'];

$endMonth= $_POST['endmonth'];

$endyear= $_POST['endyear'];

$sql = "SELECT PERIOD_DIFF(".$endyear.$endMonth.", ".$startyear.$startMonth.")";

$queryRS =  $db->query($sql);

$tmonthsarray = $db->fetchRow($c_jobsVat);

$totalmonths= $tmonthsarray[0]; 

for($count=$startMonth; $count <= ($startMonth + $totalmonths);$count++)
{
    echo "<BR>==>".date('F', mktime(0,0,0,$count)) ; // Months

    // what comes here in case of listing year
}