2017-07-19 2 views
0

Ich weiß, es ist sehr verrückt, aber ich frage immer noch nach Ihrer Lösung.Erhalten Sie die Anzahl der Tage und bestimmen Sie den Monat zwischen den beiden Daten

Jetzt habe ich zwei Daten: sagen wir Startdatum: 2017-02-01 und Enddatum: 2017-04-01.

Wenn ich das Enddatum mit dem Startdatum vergleiche, würde ich natürlich 60 Tage bekommen (beinhaltet einen Tag vom 01.02.2017 für sich).

Angenommen, ich weiß nicht, welcher Monat und wie viele Tage die Monate zwischen diesen 2 Daten haben. Ähm ... ist es sowieso, um die Tage und Monate zu bestimmen ... klar?

Etwas wie folgt aus:

  1. 2017.02.01 => 2017.02.28 = 28 Tage und dies ist der Februar
  2. 2017.03.01 => 2017.03.31 = 31 Tage und dieser ist März
  3. 2017.04.01 => 2017.04.01 = 1 Tag und das ist April

ich nur die Tage zwischen zwei Daten in PHP, und natürlich finden kann, ist es einfacher als dieser. Ich denke, dass dieses bereits das Array-Konzept abdeckt und bereits über meinen IQ XD hinausgeht.

Ich brauche deine Hilfe, beweisen Sie sich durch diese Lösung dieser Frage, vielen Dank! Sehr geschätzt.

Im einfacheren: Was ich finden wollte ist - ich will den Tag zwischen zwei Daten nicht finden, ich möchte finden, welcher Monat und wie viele Tage für jeden Monat zwischen diesen zwei Daten.

P/S: Ich habe keinen Code dafür, weil ich nicht einmal weiß, wie ich anfangen soll, dies zu kodieren.

+0

" Ich weiß nicht welchen Monat ", naja, wenn du die Daten hast, kennst du den Monat. –

+0

4. 2017-05-01 => 2017-07-01 = 61 Tage UND das war Mai, Juni, Juli? – mulquin

+0

@JulienLachal nur sagen. –

Antwort

0

Durch Weise folgen wir Anzahl der Tage zwischen zwei Terminen finden:

$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); 

Lassen Sie mich wissen, wenn Sie Problem konfrontiert.

+0

Aber es wird Ihnen nicht sagen, welcher Monat als OP angefordert –

+0

@JulienLachal danke ... du hast Recht. –

+0

@ Prabhu Nandan Kumar dies entspricht nicht meiner Anforderung, wie ich schon sagte, das ist nur der Unterschied zu finden. –

0

PHP hat einige recht leistungsfähige DateTime-Klassen und -Funktionen.

<?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); 

erhalten Sie folgende Ausgabe:

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) 
    } 
    } 
} 

Hinweis: Wenn Sie das tun zwischen 2017.05.01 und 2017.06.01, wird es nicht Juni registrieren in den Monaten Array.

2

Sie können die Funktion date_diff verwenden. date_diff Funktion des Tag zwischen zwei Daten zählen, so können Sie 2 addieren Sie Ihr Datum zu zählen ..

$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

nur versuchen, diese

$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); 
} 

Ausgang sieht aus wie unten

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