2011-10-04 3 views
0

Ces réponses ne sont pas tout ce que je veux:Obtenir une liste des derniers jours des dates de mois en PHP

Getting last month's date in php How to find the last day of the month from date?

je le code suivant qui est destiné à imprimer une boite de sélection avec tout le dernier jour des dates de mois à partir d'une date donnée:

  $last_case_date = $this->query_end_date(); 
      $increm_date = "2011-06-01"; 

      echo '<select name = "end_interval">'; 
      $increm_date = date('Y-m-d', strtotime("$increm_date")); 
      while($increm_date <= $last_case_date) { 
       // next date is $increm_date + 1 month 
       $increm_date = date('Y-m-d', strtotime("$increm_date + 1 months")); 
       // then we want the last day of this new date 
       $month = substr($increm_date, 5, 2); 
       $year = substr($increm_date, 0, 4); 
       $increm_date = $this->last_day_of_month($month, $year); 
       echo '<option value = "'.$increm_date.'" selected = "selected"'.'>'.$increm_date.'</option>'; 
      } 
      echo '</select>'; 

last_day_of_month est ceci:

function last_day_of_month($month = '', $year = '') { 
     if(empty($month)) { 
      $month = date('m'); 
     } 
     if(empty($year)) { 
      $year = date('Y'); 
     } 
     $result = strtotime("{$year}-{$month}-01"); 
     $result = strtotime('-1 second', strtotime('+1 months', $result)); 
     return date('Y-m-d', $result); 
    } 

que j'emprunté à here.

Chose étrange qui arrive est que je reçois ces dates:

2011-07-31 2011-08-31 2011-10-31

mais pas 2011-09-30! Il a probablement quelque chose à voir avec Septembre ayant seulement 30 jours ou quelque chose de bien?

Quelqu'un peut-il repérer le problème? Je l'ai regardé pendant des siècles .... Merci :).

Répondre

2

Vous pouvez simplement utiliser la fonction intégrée pour php

date('t', $timestamp); 

donc votre fonction ressemblerait à ceci:

function last_day_of_month($month = '', $year = '') { 
    $month 
     || $month = date('m'); 
    $year 
     || $year = date('y'); 
    $timestamp = mktime(0, 0, 0, $month, 1, $year); 
    return date('Y-m-t', $timestamp); 
} 
1

Pour le dernier jour du mois, utilisez:

date('Y-m-t', strtotime("$year-$month-01")) 

't' représente le « nombre de jours dans le mois donné », à savoir le dernier jour. Pas besoin d'ajouter et de soustraire quoi que ce soit.

1

Le dessous Affichera une boîte de sélection avec des options pour le dernier jour de chaque mois de l'année en cours:

echo "<select>";  
for($i=1;$i<=12;$i++){  
    echo "<option>".date('Y-m-t', strtotime(date("Y")."-".$i."-01"))."</option>";  
}  
echo "</select>"; 

Si vous souhaitez définir une autre année, il suffit de remplacer date("Y") avec, par exemple, "2010" . Vous pourriez, par exemple, boucler un certain nombre d'années, en exécutant le code pour afficher les options pour chacun d'entre eux.

0

Je pense que c'est le problème de votre morceau de code:

le increm_date original $ est "2011-06-01";

aa certain point dans le cycle de $ alors que increm_date est 2011-08-31 (dernier jour d'août)

le dans le cycle que vous ajoutez un mois afin increm_date $ est 2011-10-01 (premier jour octobre, PAS lE DERNIER DE Septmeber) si vous appelez le last_day_of_month fournissant octobre PAS septembre.

Je ne suis pas sûr de cela. Pour tester essayer d'imprimer la increm_date de $ avant last_day_of_month est appelé

Questions connexes