2017-07-19 5 views
0

Je sais que c'est très fou, mais je demande toujours votre solution.Obtenez le nombre de jours et de déterminer quel mois de l'entre deux dates

Maintenant, j'ai deux dates: disons date de début: 2017-02-01 et date de fin: 2017-04-01.

Si je compare la date de fin avec la date de début, bien sûr j'obtiendrais 60 jours (inclut un jour du 2017-02-01 pour lui-même). Supposons que je ne sais pas quel mois et combien de jours les mois ont-ils entre ces 2 dates? Euh ... est-il de toute façon de déterminer les jours et le mois ... clairement?

Quelque chose comme ceci:

  1. 2017-02-01 => 2017-02-28 = 28 jours, ce qui est Février
  2. 01/03/2017 => 31/03/2017 = 31 jours, ce qui est Mars
  3. 01/04/2017 => 01/04/2017 = 1 jour, ce qui est Avril

Je ne pouvais trouver les jours entre deux dates en PHP, et bien sûr il est plus facile que celui-ci. Je pense que celui-ci couvre déjà le concept de tableau, et déjà au-delà de mon IQ XD.

J'ai besoin de votre aide, prouvez-vous en résolvant cette question, merci beaucoup! Très appréciée.

En plus simple: Ce que je voulais trouver est - je ne veux pas trouver le jour entre deux dates, je veux trouver quel mois et combien de jours pour chaque mois entre ces deux dates.

P/S: Je n'ai pas de code pour ça, parce que je ne sais même pas comment commencer à le coder.

+0

" Je ne sais pas quel mois ", eh bien, si vous avez les dates, vous connaissez le mois. –

+0

4. 2017-05-01 => 2017-07-01 = 61 jours ET c'était mai, juin, juillet? – mulquin

+0

@JulienLachal disons juste. –

Répondre

0

Par manière suivante nous pouvons trouver nombre de jours entre deux dates:

$startTimeStamp = strtotime("2017/02/01"); 
$endTimeStamp = strtotime("2017/02/01"); 

$timeDiff = abs($endTimeStamp - $startTimeStamp); 

$numberDays = $timeDiff/86400; // 86400 seconds in one day 

// and you might want to convert to integer 
$numberDays = intval($numberDays); 

Laissez-moi savoir si vous faites face à toute question.

+0

Mais il ne vous dira pas quel mois que l'OP demandé –

+0

@JulienLachal merci ... vous avez raison. –

+0

@Prabhu Nandan Kumar cela ne répond pas à mes exigences, comme je l'ai dit, c'est juste de trouver la différence. –

0

PHP possède des classes et des fonctions DateTime assez puissantes.

<?php 

$start = new DateTime('2017-05-01'); 
$end = new DateTime('2017-07-03'); 
$interval = new DateInterval('P1D'); 
$period = new DatePeriod($start, $interval, $end); 

$output = ['daysTotal' => 0, 'months' => []]; 
$months = []; 
foreach ($period as $dt) { 
    if (!in_array($dt->format("F"), $months)) { 
     $month = ['name' => $dt->format("F"), 'days' => cal_days_in_month(CAL_GREGORIAN, $dt->format("n"), $dt->format("Y"))]; 
     $output['months'][] = $month; 
     $months[] = $dt->format("F"); 

    } 
    $output['daysTotal']++; 
} 

var_dump($output); 

Affichera:

array(2) { 
    ["daysTotal"]=> 
    int(63) 
    ["months"]=> 
    array(3) { 
    [0]=> 
    array(2) { 
     ["name"]=> 
     string(3) "May" 
     ["days"]=> 
     int(31) 
    } 
    [1]=> 
    array(2) { 
     ["name"]=> 
     string(4) "June" 
     ["days"]=> 
     int(30) 
    } 
    [2]=> 
    array(2) { 
     ["name"]=> 
     string(4) "July" 
     ["days"]=> 
     int(31) 
    } 
    } 
} 

Note: Si vous faites entre 01/05/2017 et 01/06/2017, il ne sera pas enregistré Juin dans le tableau mois.

2

Vous pouvez utiliser la fonction date_diff. date_diff fonction compter le jour entre deux dates, vous pouvez ajouter 2 compter votre date trop ..

$date1=date_create("2017-02-01"); 
$date2=date_create("2017-04-01"); 
$diff=date_diff($date1,$date2); 

$res = $diff->format("%R%a days"); 
echo ($res + 2); 
0

juste essayer cette

$from_date = "2017-02-01"; 
$to_date = "2017-04-01"; 
$start = $month = strtotime($from_date); 
$tmp = cal_days_in_month(CAL_GREGORIAN,date('m',strtotime($to_date)),date('Y',strtotime($to_date))); 
$end = strtotime(date('Y-m',strtotime($to_date)).'-'.$tmp); 
while($month < $end){ 
    $days = cal_days_in_month(CAL_GREGORIAN,date('m',$month),date('Y',$month)); 
    if(date('m',$start) == date('m',$month)) { 
     $days = $days - date('d',$start) + 1; 
    } else if(date('m',$end) == date('m',$month)) { 
     $days = date('d',strtotime($to_date)); 
    } 
    echo "Days :".$days." Month :".date('F',$month); 
    echo '<br>'; 
    $month = strtotime("+1 month", $month); 
} 

Affichera ressemble ci-dessous

Days :28 Month :February Days :31 Month :March Days :01 Month :April