Datum und Uhrzeit in PHP überprüfen

5194
michaelespinosa

Ziel: Einen Countdown für den nächsten verfügbaren Live-Stream erstellen.

Details: Wir sind alle sechsmal pro Woche (PST) im Livestream. 1. Sonntag um 8:00 Uhr 2. Sonntag um 10:00 Uhr 3. Sonntag um 12:00 Uhr 4. Sonntag um 18:30 Uhr 5. Mittwoch um 19:00 Uhr 6. Samstag um 10:00 Uhr

Mein Ansatz: Ich überprüfe, was für ein Tag es ist und wie spät es ist, und erstelle dann den Countdown für den nächsten Stream.

Ich bin sicher, dass das, was ich getan habe, aufgeräumt und verbessert werden kann, also sagt mir, wie.

<?php
// Countdown Stuff
$year = date(Y);
$month = date(m);
$month_day = date(d);
$day = date(w);
$hour = date(G);
$min = date(i);
$addDay = 0;

// It's Sunday
if ( $day == 0 ) {
    if ( $hour < 8 ) {
       $hour = 8;
       $min = 0;
    } 
    else if ( $hour < 10 ) {
       $hour = 10;
       $min = 0;
    } 
    else if ( $hour < 12 ) {
       $hour = 12;
       $min = 0;
    }
    else if ( $hour <= 18 && $min < 30 ) {
       $hour = 18;
        $min = 30;
    } 
    else {
     $addDay = 3;
       $hour = 19;
       $min = 0;
    }
} 
// It's Monday
else if ( $day == 1 ) {
    $addDay = 2;
      $hour = 19;
      $min = 0;
} 
// It's Tuesday
else if ( $day == 2 ) {
    $addDay = 1;
      $hour = 19;
      $min = 0;
} 
// It's Wednesday
else if ( $day == 3) {

    if ( $hour < 19 ) {
       $hour = 19;
       $min = 0;
    } else {
     $addDay = 3;
       $hour = 10;
       $min = 0;
    }
} 
// It's Thursday
else if ( $day == 4 ) {
    $addDay = 2;
      $hour = 10;
      $min = 0;
} 
// It's Friday
else if ( $day == 5 ) {
    $addDay = 1;
      $hour = 10;
      $min = 0;
} 
// All that's left is Saturday
else {

    if ( $hour < 10 ) {
       $hour = 10;
       $min = 0;
    } else {
     $addDay = 1;
       $hour = 8;
       $min = 0;
    }
}


$build_date = $year . '-' . $month . '-' . $month_day . ' ' . $hour . ':' . $min . ':00';
$date = new DateTime($build_date);

if ( $addDay ) {
    $date->modify("+$addDay day");
}

$date = strtotime($date->format("Y-m-d G:i:s"));
$now = strtotime("now");
$count = $date - $now;
?>

<script type="text/javascript">
var myTime = <?=$count?>;
$('#countdown').countdown({ until: myTime}); 
</script>
Antworten
10

4 Antworten auf die Frage

11
bob-the-destroyer

Um Andrews Antwort darauf hinzuzufügen, welche Art von Zeitstempeln mit strtotime () erstellt werden kann, kann der Code auf etwa 25 Zeilen reduziert werden.

<?php

$schedule = array(
    'this Sunday 8am',
    'this Sunday 10am',
    'this Sunday 12pm',
    'this Sunday 6:30pm',
    'this Wednesday 7pm',
    'this Saturday 10am'
    );

$current_time = strtotime('now');
foreach ($schedule as &$val) {
    $val = strtotime($val);
    // fix schedule to next week if time resolved to the past
    if ($val - $current_time < 0) $val += 604800; 
    }
sort($schedule);
$countdown = $schedule[0] - $current_time;

?>

<script type="text/javascript">
    var myTime = <?php echo $countdown; // just personally prefer full tags ?>;
    $('#countdown').countdown({ until: myTime}); 
</script>

Um die Antwort von visionary-software-solutions zu ergänzen, speichern Sie den Zeitplan am besten in einer Datenbank oder in einer separaten Datei vom Typ xml / text / json / etc. Auf diese Weise können die Mitarbeiter einfach ein internes Webformular verwenden, um die Zeitpläne zu ändern, anstatt dass der PHP-Entwickler die Änderungen jedes Mal hart codiert. Auf dieser Webseite können Sie Mitarbeitern erlauben, nur einen Wochentag und eine Uhrzeit auszuwählen und die Seite diese in eine Zeichenfolge übersetzen zu lassen, die in strtotime()diesem Countdown-Skript verwendet werden kann.

Bearbeiten: feste strtotime()Werte. Vorsicht bei "diesem Tag" vs. "Nächste". Weitere Informationen zu den möglichen Strings strtotime()finden Sie unter: http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html

4
Andrew

Ich habe keine Zeit, alles durchzusehen, aber ich habe bemerkt, dass Sie nur $minetwas anderes eingestellt haben 0. Sie können oben Folgendes hinzufügen $build_dateund dann alle $min = 0;s entfernen, und Sie würden ein paar Zeilen löschen:

if($min == date('i')) {
  $min = 0;
}

Wenn sich dies nicht geändert hat, was nur geschehen würde, wenn Sie es 30in dieser einen Instanz festgelegt haben, dann setzen Sie es auf 0.

3
agentile

Ein paar Dinge, die heraus sprangen.

In Ihren date () - Aufrufen übergeben Sie Konstanten anstelle von Zeichenfolgen, z. B. verwenden Sie date (Y) anstelle von date ('Y'). Dadurch wird ein Benachrichtigungsfehler ausgegeben. PHP geht davon aus, dass Sie eine Zeichenfolge gemeint haben, aber es ist am besten, explizit zu sein.

Die Funktion getdate () liefert Ihnen alle Informationen, anstatt date () sechsmal aufzurufen.

Für das, was Sie tun möchten, würde ich empfehlen, einen Blick auf die Funktion mktime () zu werfen. Wenn Sie die nächste Live-Stream-Zeit aus Ihrer aktuellen Zeit berechnet haben, übergeben Sie diese Werte einfach an mktime () und führen Sie eine Zeit () - mktime () aus. So viele Sekunden haben Sie bis zum Ereignis. mktime erzeugt einen UNIX-Zeitstempel, sodass Sie diesen an die date () - Funktion oder ein DateTime-Objekt übergeben können, um das Format zu formatieren, die Zeitzone zu ändern usw.

Wenn Sie viele if / elseif -Anweisungen wie diese haben, wäre es sinnvoller, eine switch-Anweisung zu verwenden.

2
Visionary Software Solutions

Wenn sich Ihr Unternehmen nun für einen Wechsel der Streams von Sonntag um 8:00 Uhr bis Dienstag um 2 Uhr entscheidet, müssen Sie diesen Code natürlich hacken. Und wenn Sie ein "versauen"; oder '? php' oder ein junger Entwickler übergibt "NO WAY" an strtotime ()?

Entwickeln Sie Ihren Ansatz. Sie sollten die Streamzeiten extern speichern. entweder in einer Datei oder in einer Datenbank. Sie sollten diese Zeiten abfragen, eine strtotime () - Differenz zwischen ihnen und jetzt vornehmen und dann das minimale positive Element verwenden und dieses anzeigen.