Ich habe ein Szenario, wo ein Benutzer ein Start-und Stop-Datum für eine Reservierung in einem Hotel übermittelt. Die Datenbank hat unterschiedliche (tägliche) Preise für Zeiträume des Jahres. Angesichts des Datumsbereichs des Benutzers möchte ich beginnen, indem ich die Anzahl der Tage, die der Bereich des Benutzers in jedem Bereich hat, aus der Datenbank zähle und dann mit dem Tagespreis für diesen Zeitraum multipliziere.PHP-Daten und Tageszählung
frei Benutzer:
03 Jun 2012 - 03 Jul 2012
Relevante Datumsbereiche von der DB
Array
(
[0] => stdClass Object
(
[date_from] => 2012-04-09
[date_to] => 2012-06-04
[price] => 44
)
[1] => stdClass Object
(
[date_from] => 2012-06-04
[date_to] => 2012-07-02
[price] => 52
)
[2] => stdClass Object
(
[date_from] => 2012-07-02
[date_to] => 2012-07-16
[price] => 61
)
)
Wie Sie die Reservierung beginnt im ersten Bereich sehen können, erstreckt sich über den zweiten Bereich und endet in der dritten Reihe.
foreach ($dates as $key => $d)
{
$days = 0;
$user_start = strtotime($range['start']);
$user_stop = strtotime($range['stop']);
$db_start = strtotime($d->date_from);
$db_stop = strtotime($d->date_to);
if($user_start >= $db_start && $user_stop < $db_stop)
{
$start = $range['start'];
$stop = $range['stop'];
}
elseif($user_start <= $db_start && $user_stop > $db_start)
{
$start = $d->date_from;
$stop = $d->date_to;
}
elseif($user_start <= $db_stop && $user_stop > $db_stop)
{
$start = $range['start'];
$stop = $d->date_to;
}
$days = calculate_nbr_days($start, $stop);
$price += $days * $d->price;
}
Dieser Code fast funktioniert, außer der Tatsache, nimmt er das Ende der Reservierung ($stop
) als das letzte Datum des DB-Bereich statt der Reichweite des Benutzers sein, und ich kann, warum nicht herausfinden!
Sie Schleifen '$ Daten', so wird es bis zum Ende der DB-Bereich berechnen – safarov