2012-03-29 5 views
0

Ich verwende den folgenden Code (auf der Grundlage dieser http://goo.gl/5HhSx), um die Differenz zwischen diesen Zeitpunkten zu berechnen:Wie wird nach Berechnung der Differenz zwischen den Daten jedem Datum ein Preis zugewiesen? (Date_diff)

<?php 
$date1 = '2012-03-29'; 
$date2 = '2012-04-02'; 
$datetime1 = date_create($date1); 
$datetime2 = date_create($date2); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%a days'); 
?> 

Der Unterschied ist 4 days.March hat einen Festpreis (30 €/Tag) und im April hat noch einen (40 €/Tag). Gibt es eine Möglichkeit, den gesamten Preis zu summieren? Drei Tage bis Ende März und zwei weitere ab April? Wie kann ich sie richtig hinzufügen? Jede Hilfe wäre willkommen. Vielen Dank.

Antwort

0

Für Ihr genaues Beispiel das funktioniert:

$date1 = '2012-03-29'; 
$dateBoundary = substr($date1, 0, 8).date('t', strtotime($date1)); 
$date2 = '2012-04-02'; 
$marchPrice = 30; 
$aprilPrice = 40; 
$datetime1 = date_create($date1); 
$datetime1Boundary = date_create($dateBoundary); 
$datetime2 = date_create($date2); 
$interval1 = date_diff($datetime1, $datetime1Boundary); 
$interval2 = date_diff($datetime1Boundary, $datetime2); 
$totalPrice = ($interval1->format('%d') * $marchPrice) + ($interval2->format('%d') * $aprilPrice); 
echo number_format($totalPrice, 2); 

Sie können natürlich die Idee für Zeiträume extrapolieren, die mehrere Monate erstrecken.

+0

Ja, das wie erwartet funktioniert. Was passiert also, wenn ein Monat in zwei Perioden geteilt wird? Zum Beispiel ist der 1. bis 15. März 20 € und vom 16. bis Ende des Monats 30 €. Sollte ich Fälle verwenden (Switch-Break)? –

+0

Sie können die Grenze einfach als mittleren Monat festlegen und die Preismultiplikatoren wie erforderlich ändern. – Ing

+0

Also wie soll ich die Grenze bearbeiten, um den Monat in zwei Perioden zu teilen? –

0

Extract der Monat aus dem Datum wie folgt:

SELECT MONTH('8/14/04') as "Month"; 

für jedes Datum zwischen ‚2012-03-29‘ und ‚2012-04-02‘ und dann die Tabelle entsprechend aktualisieren. Falls Sie die Summe addieren möchten, verwenden Sie eine gespeicherte Prozedur - deklarieren Sie eine Variable 'sum' initialisiert auf Null und fügen Sie sie hinzu, indem Sie die folgenden Fälle verwenden: CASE '04' then sum+=30 , CASE '03' then sum+=20. Sie können auch eine Aggregatfunktion in Ihrer Prozedur zum Berechnen verwenden.

0

Kurze Logik zum Erreichen des Zielergebnisses.

  1. eine Reihe von Preisliste für die Monate halten,
  2. die Differenz der Monate zwischen den Terminen finden.
  3. In einer Schleife für den Monat die Tagesdifferenz vom letzten Tag für diesen Monat nehmen und mit dem entsprechenden Preis aus dem Array multiplizieren.
  4. Innerhalb der Schleife Summe dieser Berechnung in eine Gesamtmenge Variable.

Siehe die mktime() und Date() funktioniert

Verwandte Themen