2011-12-23 2 views
0

Im essayant de générer des jours du mois en cours comme celui-cicomment générer des jours mensuels avec PHP?

$year = date('Y'); 
    $month = date('m'); 

    $dayCount = cal_days_in_month(CAL_GREGORIAN,$month,$year); 

    for ($i = 1; $i <= $dayCount; $i++) 
    { 
     $tree_data->data[$i] = $year."-".$month."-".$i; 
    } 
    print "<pre>"; 
    print_r($tree_data); 

qui me donne une sortie comme

stdClass Object 
(
    [data] => Array 
     (
      [1] => 2011-12-1 
      [2] => 2011-12-2 
      [3] => 2011-12-3 
      [4] => 2011-12-4 
      [5] => 2011-12-5 
      [6] => 2011-12-6 
      [7] => 2011-12-7 
      [8] => 2011-12-8 
      [9] => 2011-12-9 
      [10] => 2011-12-10 
      [11] => 2011-12-11 
      [12] => 2011-12-12 
      [13] => 2011-12-13 
      [14] => 2011-12-14 
      [15] => 2011-12-15 
      [16] => 2011-12-16 
      [17] => 2011-12-17 
      [18] => 2011-12-18 
      [19] => 2011-12-19 
      [20] => 2011-12-20 
      [21] => 2011-12-21 
      [22] => 2011-12-22 
      [23] => 2011-12-23 
      [24] => 2011-12-24 
      [25] => 2011-12-25 
      [26] => 2011-12-26 
      [27] => 2011-12-27 
      [28] => 2011-12-28 
      [29] => 2011-12-29 
      [30] => 2011-12-30 
      [31] => 2011-12-31 
     ) 

) 

mon problème est que je veux obtenir 1 - 9 jours comme

2011-12-01, 2011-12-02 etc... 

une idée de comment obtenir la sortie comme ça?

Répondre

6

Vous pouvez utiliser sprintf.

sprintf('%1$02d', $i); 

Une autre approche pourrait être d'utiliser l'objet DateTime:

$aDates = array(); 
$oStart = new DateTime('2011-12-01'); 
$oEnd = clone $oStart; 
$oEnd->add(new DateInterval("P1M")); 

while($oStart->getTimestamp() < $oEnd->getTimestamp()) { 
    $aDates[] = $oStart->format('Y-m-d'); 
    $oStart->add(new DateInterval("P1D")); 
} 
+0

+1 pour la suggestion DateTime. – liquorvicar

+0

En effet, très chique –

+0

Merci beaucoup ... –

1
$year = date('Y'); 
$month = date('m'); 

$dayCount = cal_days_in_month(CAL_GREGORIAN,$month,$year); 

for ($i = 1; $i <= $dayCount; $i++) 
{ 
    $tree_data->data[$i] = $year."-".$month."-".(($i < 10)?'0'.$i:$i); 
} 
print "<pre>"; 
print_r($tree_data); 
+0

Vous n'êtes pas sûr du ternaire. N'êtes-vous pas en train de réinventer les roues? Pourquoi ne pas utiliser str_pad? – liquorvicar

3

Cela devrait être suffisant. :)

$year = date('Y'); 
$month = date('m'); 

$dayCount = cal_days_in_month(CAL_GREGORIAN,$month,$year); 

for ($i = 1; $i <= $dayCount; $i++) 
{ 
    $tree_data->data[$i] = $year."-".$month."-".str_pad($i, 2, "0", STR_PAD_LEFT); 
} 
$ret = implode(", ", $tree_data->data); 
+0

avec STR_PAD_LEFT j'ai eu la sortie dont j'avais besoin merci –

+0

Édité, c'était en effet une erreur de mon côté. – NoLifeKing

1

bien que d'autres réponses suggèrent que vous pouvez ajouter 0 le jour sous condition, ou voici une autre façon d'aller sur les choses juste au cas où.

$startMonth = date('Y-m-01'); 
    $endMonth = date('Y-m-t'); 
    $i = 0; 
    while(strtotime($startMonth) <= strtotime($endMonth)){ 
     $tree_date->date[$i] = $startMonth; 
     $startMonth = date('Y-m-d', strtotime($startMonth.' +1 days')); 
     $i++; 
    } 

    print_r($tree_date); 
+0

Ou peut-être plutôt que $ endMonth = date ('Y-m-00', strtotime ('+ 1 mois')); vous pouvez utiliser $ endMonth = date ('Y-m-t'); – liquorvicar

Questions connexes