2012-03-29 5 views
0

Ich erstelle einen Bericht in PHP, in dem 6 HTML-Dropdowns erscheinen und den Benutzer auffordern, die zwei Daten einzugeben, in denen sie die Daten des Berichts sehen möchten. So zum Beispiel geht der Bericht wie folgt:Logik über Daten in PHP

Siehe Daten zwischen: [Monat] [Tag] [Jahr] und [Monat] [Tag] [Jahr] (wobei die Klammern einen select-Tag bedeuten)

Auch In diesem Bericht ist eine Funktion, die den prozentualen Anstieg oder Rückgang vom Vortag berechnet. So zum Beispiel, wenn der Benutzer keinen Datumsbereich auswählt, dann ist es einfach Daten des aktuellen Tages und der Prozentsatz wird wie folgt berechnet:

round(((($newDataPointCount - $yesterdayDataPointCount)/$yesterdayDataPointCount) * 100),2) 

Das ist offensichtlich sehr einfach ist, nur für einen Tag zu berechnen, weil ich ihm sagen kann, Abfrage der SQL-Datenbank mit INTERVAL 1 DAY. Aber hier ist meine Frage, wie würde ich die Anzahl der Tagesintervalle berechnen, wenn sich die Monate ändern?

Alles würde gut funktionieren, wenn der Benutzer innerhalb eines Monats bleibt, also wäre es etwas wie [März] [20] [2012] - [März] [29] [2012], und ich kann leicht den Wert 9 berechnen , aber wenn es so etwas wie [Februar] [27] [2012] - [März] [20] [2012] ist, wie kann ich die Anzahl der Tage dazwischen berechnen?

Nur um irgendwelche Fragen zu klären, verwende ich PHP und MySQL und würde es vorziehen, innerhalb dieser Grenzen zu bleiben.

Antwort

1

Die DATEDIFF Funktion MySQL sollte die Aufgabe

DATEDIFF

+0

Ich habe gerade die PHP-Datum-> Diff-Funktion ausgecheckt. Danke für den Tipp! – bswinnerton

1

Termine sind nicht Skalare erreichen und nicht als solche behandelt werden sollten. Mein Rat ist, die richtigen Werkzeuge für die Datumsarithmetik zu verwenden.

Viele Menschen legen nahe, Unix-Zeitstempel orientierte Datum Mathematik:

$a = '2012-02-12 14:03:50'; 
$b = '2012-05-30 00:55:03'; 
$days = (strtotime($b) - strtotime($a))/86400; 

jedoch die Sommerzeit und alle Arten von Faktoren falsch, diese Art von Mathematik machen.

Mein Ansatz ist in der Regel Datetime verwenden:

$a = new DateTime('2012-02-12 14:03:50'); 
$b = new DateTime('2012-05-30 00:55:03'); 
$diff = $b->diff($a); 
//$diff is now a DateInterval 

jedoch Ihre eigentliche Frage zu beantworten, würde ich nicht die Daten von MySQL basiert auf MySQL Datum Mathematik, ziehen, sondern würde ich nur geben, es stammt.

WHERE d >= '2012-02-27' AND d <= '2012-03-29'; 

Obwohl auf Basis Ihrer Anforderungen, müssen Sie möglicherweise die 27-26 ändern, wie am Vortag packen und damit die Berechnungen tun.

Um die Änderungen in den Punktwerten zu tun, würde ich sie entweder vorberechnen und speichern, oder ich würde sie einfach in PHP berechnen. Es gibt keinen einfachen Weg, um SQL zu sagen, "hey, schnapp dir jeden Datensatz zwischen diesen Daten, und während du dabei bist, mach etwas Mathe mit dem vorherigen Datensatz jedes Datensatzes."

Ich hoffe, dass dies klar war, aber ich habe das Gefühl, es grenzt an weit außer Klarheit, also wenn ja, lass es mich wissen und ich werde meine Antwort bearbeiten.