2011-07-07 3 views
2

J'utilise les codes suivants pour afficher les dates de début et de fin du mois en cours.Comment obtenir les dates de début et de fin des mois d'une plage de dates donnée en php

function firstOfMonth() { 
return date("m/d/Y", strtotime(date('m').'/01/'.date('Y').' 00:00:00')); 
} 

function lastOfMonth() { 
return date("m/d/Y", strtotime('-1 second',strtotime('+1 month',strtotime(date('m').'/01/'.date('Y').' 00:00:00')))); 
} 

$date_start = firstOfMonth(); 
$date_end = lastOfMonth(); 
echo $date_start; 
echo $date_end; 

Question: Comment se dates de début et de fin de tous les mois dans une gamme de date donnée

Pour exemple:

function daterange($startdate,$enddate) 
{ 
... 
... 
... 
} 

Résultat attendu est tableau des dates de début et de fin de chaque mois entre la plage de dates $startdate et $enddate.

Aidez-moi comment faire ....

+1

Qu'avez-vous essayé? Y a-t-il quelque chose de spécifique qui te trouble? – hughes

+0

Vous connaissez 'date'. Vous connaissez 'strtotime'. Et il doit y avoir des centaines de questions demandant comment obtenir des dateranges avec PHP déjà. Alors quel est le problème? – Gordon

Répondre

4
<?php 
//Function to return out start and end dates of all months in a date range given 

function rent_range($start_date, $end_date) 
{ 
    $start_date = date("m/d/Y", strtotime($start_date)); 
    $end_date = date("m/d/Y", strtotime($end_date)); 
    $start = strtotime($start_date); 
    $end = strtotime($end_date); 

    $month = $start; 
    $months[] = date('Y-m', $start); 
    while($month < $end) { 
     $month = strtotime("+1 month", $month); 
     $months[] = date('Y-m', $month); 
    } 

    foreach($months as $mon) 
    { 
     $mon_arr = explode("-", $mon); 
     $y = $mon_arr[0]; 
     $m = $mon_arr[1]; 
     $start_dates_arr[] = date("m/d/Y", strtotime($m.'/01/'.$y.' 00:00:00')); 
     $end_dates_arr[] = date("m/d/Y", strtotime('-1 minute', strtotime('+1 month',strtotime($m.'/01/'.$y.' 00:00:00')))); 
    } 

    //to remove first month in start date and add our start date as first date 
    array_shift($start_dates_arr); 
    array_pop($start_dates_arr); 
    array_unshift($start_dates_arr, $start_date); 

    //To remove last month in end date and add our end date as last date 
    array_pop($end_dates_arr); 
    array_pop($end_dates_arr); 
    array_push($end_dates_arr, $end_date); 

    $result['start_dates'] = $start_dates_arr; 
    $result['end_dates'] = $end_dates_arr; 
    return $result; 
} 

$start_date = '2011-07-29'; 
$end_date = '2012-03-31'; 
$res = rent_range($start_date, $end_date); 
echo "<pre>"; 
print_r($res); 
echo "</pre>"; 
?> 

Mon au-dessus de la fonction donnera l'affichage de la plage de mois de dates dans une plage donnée. Cette fonction serait utile pour le calcul du loyer mensuel en tant que tradition indienne.

Il peut aider quelqu'un d'autre ....

1

Jetez un oeil à date function et faites défiler pour mettre en forme le caractère t qui vous donne le nombre de jours. La date de début sera toujours 1 :-)

Faire cela dans une boucle pour le nombre de mois entre les deux dates et le stockage des valeurs dans un tableau est à vous

0
function firstAndLast($d=''){ 
    $d = $d?$d:time(); 
    $f = mktime(0,0,0,date("n",$d),1,date("Y",$d)); 
    $l = mktime(0,0,0,date("n",$d),date("t",$d),date("Y",$d)); 
    return array($f,$l); 
} 

list($first,$last) = firstAndLast(); 
echo date("d/m/Y",$first)." ($first) - ".date("d/m/Y",$last)." ($last)"; 

Vous pouvez passer un horodatage à la fonction ou laisser le champ vide et il reprendra l'heure actuelle

Questions connexes