Holen Sie sich Wochenenddaten in php

Lesezeit: 3 Minuten

Ich arbeite an einer PHP-Anwendung, die erfordert, dass ich die Daten der Wochenenden zwischen zwei Daten extrahiere und sie dann als einzelne Datensätze in die MySQL-Datenbank einfüge.

Ich habe überlegt, ob es einen einfacheren Weg gibt, anstatt die Schleife zwischen Startdatum und Enddatum zu durchlaufen und für jedes Datum zu prüfen, ob date('l', strtotime($date)) gibt “Samstag” oder “Sonntag” zurück

Vielen Dank für Ihre Zeit

Sunil

  • Ich wollte nur anmerken, dass die Wahrscheinlichkeit, Wochenendtermine mit PHP zu bekommen, gering bis null ist ;o) – waka waka waka. Jetzt werde ich sehen, was ich in Bezug auf eine Antwort für Sie tun kann. In welchem ​​Format sind die 2 Daten – UNIX vorzuziehen?

    – TCCV

    28. Juli 2010 um 4:00 Uhr


  • Schlagen Sie mich zum Witz, da, Tim…

    – DGM

    28. Juli 2010 um 4:11 Uhr

Holen Sie sich Wochenenddaten in php
Nick Presta

Wenn Sie eine ältere PHP-Installation verwenden (oder die DateTime-Klasse nicht haben):

$now = strtotime("now");
$end_date = strtotime("+3 weeks");

while (date("Y-m-d", $now) != date("Y-m-d", $end_date)) {
    $day_index = date("w", $now);
    if ($day_index == 0 || $day_index == 6) {
        // Print or store the weekends here
    }
    $now = strtotime(date("Y-m-d", $now) . "+1 day");
}

Wir durchlaufen den Datumsbereich und prüfen, ob der Tag ein ist 0 oder 6 Index (Sonntag oder Samstag).

  • Danke. Ich habe Startdatum in Uhrzeit konvertiert und die obige Funktion verwendet ‘while (date(“Ymd”, $start_date) != date(“Ymd”, $end_date)) { $day_index = date(“w”, $start_date); if ($day_index == 0 || $day_index == 6) { echo date(‘Ym-d’,$start_date).”
    “; } $start_date = strtotime(date(“Ymd”, $start_date) . “+1 Tag”); }’

    – Sunil Shenoy

    29. Juli 2010 um 6:46 Uhr

Nun, das PHP-Datum (“N”) gibt Ihnen den Wochentag an, wobei 1 Montag und 7 Sonntag ist, sodass Sie dies ziemlich einfach in eine if-Anweisung implementieren können.

1647149046 803 Holen Sie sich Wochenenddaten in php
Artefakt

$now = new DateTime("now");
$now->setTime(0,0);
if (($now->format("l") == "Saturday") || ($now->format("l") == "Sunday"))
    $d = $now;
else
    $d = new DateTime("next saturday");

$oneday = new DateInterval("P1D");
$sixdays = new DateInterval("P6D");
$res = array();
while ($d->getTimestamp() <= $endTimestamp) {
    $res[] = $d->format("Y-m-d");
    $d = $d->add($oneday);
    if ($d->getTimestamp() <= $endTimestamp) {
        $res[] = $d->format("Y-m-d");
    }
    $d = $d->add($sixdays);
}

Beispiel mit

$end = new DateTime("2010-08-20");
$endTimestamp = $end->getTimestamp();
array(6) {
  [0]=>
  string(10) "2010-07-31"
  [1]=>
  string(10) "2010-08-01"
  [2]=>
  string(10) "2010-08-07"
  [3]=>
  string(10) "2010-08-08"
  [4]=>
  string(10) "2010-08-14"
  [5]=>
  string(10) "2010-08-15"
}

Für alle anderen, die dies finden – ich habe Folgendes verwendet:

$start = new DateTime($this->year.'-'.$month.'-01');
$interval = new DateInterval('P1D');
$end = new DateTime($this->year.'-'.$month.'-31');

$period = new DatePeriod($start,$interval,$end);

foreach ($period as $day){
    if ($day->format('N') == 6 || $day->format('N') == 7){
        $compulsory[$day->format('d')] = true;
    }
}

Ändern Sie Ihren eigenen Startbereich und Endbereich und formatieren Sie nicht nur das d in $obligatorisch – Sie könnten d/m/Y für ein umfangreicheres Datum verwenden.

  • Warum nicht verwenden strtotime? Was passiert, wenn Sie einen Tippfehler in Ihren magischen Zahlen machen?

    – Nick Presta

    28. Juli 2010 um 4:21 Uhr

  • Ich glaube, ich bin davon ausgegangen, dass die Zeitstempel alle UTC sein würden, um solche Probleme zu vermeiden.

    – asastral

    28. Juli 2010 um 23:55 Uhr

996090cookie-checkHolen Sie sich Wochenenddaten in php

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy