2 Stimmen

Parametrisierung von PHP-Code mit DatePeriod, DateInterval Klassen

Ich verstehe DatePeriod, DateInterval Klassen nicht sehr gut. Diese Frage ist mit einer anderen Frage verknüpft - Wie kann man umgerechnete Zeitzonen in einer "generischen Woche" (Sonntag bis Samstag) anzeigen? in dem ich die Lösung parametrisieren möchte, die von artefacto .

Für Hilfe wären wir dankbar!

Dies ist der Code von artefacto:

$tz1 = new DateTimezone("Asia/Calcutta");
$indiaAvail = array(
    new DatePeriod(new DateTime("2010-08-01 10:00:00", $tz1),
        new DateInterval("PT2H15M"), 1)
);

Das habe ich mir ausgedacht:

function shift_timezones_onweek($from_timezone, $from_timebegin, $from_timeend, $to_timezone)
{

    $tz1 = new DateTimezone($from_timezone);

    $datetime1 = new DateTime("2010-08-01 $from_timebegin", $tz1);
    $datetime2 = new DateTime("2010-08-01 $from_timeend", $tz1);

    $interval = $datetime1->diff($datetime2);

    $indiaAvail = array(
        new DatePeriod($datetime1, $interval, 1)
    );
    ...

Wie artefacto darauf hinweist, "gibt es keinen Sinn in den Aufbau einer DatePeriod aus zwei Zeiten, nur um es sofort nach in diese zwei Daten zerlegt haben", aber ich verstehe nicht, wie ich dies leicht ändern kann, damit es mit dem Rest seines Codes (die $indiaAvail zu existieren, wie es ist ich schätze, erfordert ...) arbeiten

0voto

Artefacto Punkte 93200

En DatePeriod speichert ein Startdatum, ein Enddatum und ein Intervall (oder, äquivalent dazu, ein Startdatum, ein Intervall und eine Anzahl von Wiederholungen). Sie ist Traversable und bei Iteration in einer foreach Schleife, werden alle Daten ( DateTime Objekte) vom Anfang bis zum Ende, mit dem angegebenen Abstand zwischen ihnen.

Daher ist die Iteration von a DatePeriod Klasse ist dasselbe wie die Iteration eines Arrays, das aus allen Daten besteht, die sich aus DatePeriod .

Wir können also schreiben:

//...
$tz1 = new DateTimezone($from_timezone);

$datetime1 = new DateTime("2010-08-01 $from_timebegin", $tz1);
$datetime2 = new DateTime("2010-08-01 $from_timeend", $tz1);

$indiaAvail = array(
    array($datetime1, $datetime2),
);

$tz2 = new DateTimezone($to_timezone);
//convert periods:
$times = array_map(
    function (array $p) use ($tz2) {
       $res = array();
       foreach ($p as $d) {
           $res[] = $d->setTimezone($tz2);
       }
       return $res;
    },
    $indiaAvail
);
//...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X