2016-03-24 11 views
0

Ich möchte überprüfen, ob der gewählte Tag (für ein Beispiel 25 jeden Monat) ein Wochenende oder nicht sind.Holen Sie den nächsten Wochentag nach dem gewählten Tag

Wenn es kein Wochenende ist (Samstag oder Sonntag), bleibt der gewählte Tag erhalten. Aber wenn der Tag ein Wochenende ist, wird der gewählte Tag auf den nächsten Wochentag (Montag bis Freitag) verschoben. Freitag

Beispiele

2016-03-24 is a Thursday. 
2016-03-25 is a Friday. 
2016-03-26 is a Saturday. 
2016-03-27 is a Sunday. 
2016-03-28 is a Monday. 

Wenn der Tag 26 für diesen Monat ist, ist der nächste Wochentag. Wenn der Tag für diesen Monat 27 ist, ist der nächste Wochentag ein Montag. Und so weiter ...

Wie kann ich das erreichen?

+0

vor oder zurück zum nächsten Wochentag verschoben? – mitkosoft

+0

@mitkosoft Wie im Beispiel. Wenn der Tag Sonntag ist, ist der nächste Wochentag Montag, aber wenn der Tag an einem Samstag ist, ist der nächste Wochentag an einem Freitag. – Erik

+0

@ j08691 Ich habe nichts versucht, da ich nicht weiß, wie das geht. – Erik

Antwort

3

So etwas wie diese

function getClosestWeekday($dateString) { 
    $date = new DateTime($dateString); 
    $weekday = $date->format("N"); 
    if ($weekday == 6) { 
     $date = $date->sub(new DateInterval("P1D")); 
    } else if ($weekday == 7) { 
     $date = $date->add(new DateInterval("P1D")); 
    } 
    return $date; 
} 
var_dump(getClosestWeekday("2016-03-24")); // returns 2016-03-24 
var_dump(getClosestWeekday("2016-03-25")); // returns 2016-03-25 
var_dump(getClosestWeekday("2016-03-26")); // returns 2016-03-25 
var_dump(getClosestWeekday("2016-03-27")); // returns 2016-03-28 
var_dump(getClosestWeekday("2016-03-28")); // returns 2016-03-28 

Die Tatsache, dass Sie nicht wissen, wie dies zu tun, rechtfertigt nicht, dass man nicht alles versucht hat. PHP.net bietet Ihnen alle Tools, um zumindest auf dem Weg dorthin zu sein. http://php.net/manual/en/book.datetime.php

1

versuchen

<?php 
$day = date('l', strtotime('2009-10-24')); 
if($day == 'Saturday'){ 
    echo 'Friday'; 
} else if($day == 'Sunday'){ 
    echo 'Monday'; 
} else { 
    echo $day; 
} 

hoffe, es hilft :)

0

Also, zu vereinfachen, wenn Sa, sollte -1 Tag verschoben werden, wenn Sonne ist, werden +1 bewegt sollte, otherwhise bleibt ist:

<?php 
    function changeDate($date) { 
     if (date("N", strtotime($date)) == 6) { 
      return date("Y-m-d", strtotime("-1 day ", strtotime($date))); 
     } elseif (date("N", strtotime($date)) == 7) { 
      return date("Y-m-d", strtotime("+1 day ", strtotime($date))); 
     } else { 
      return date("Y-m-d", strtotime($date)); 
     } 
    } 

    echo changeDate("2016-03-25"); //Friday 
    echo '<br>'; 
    echo changeDate("2016-03-26"); //Saturday 
    echo '<br>'; 
    echo changeDate("2016-03-27"); //Sunday 
?> 

Ausgang:

2016-03-25 //not changed 
2016-03-25 //moved -1 day 
2016-03-28 //moved +1 day 
0

Im folgenden Beispiel zeige ich Ihnen die kürzeste und (meiner Meinung nach) beste Option für den nächsten Wochentag.

// Create a new DateTime object 
$date = DateTime::createFromFormat('Y-m-d', '2016-03-25')->modify('-1 day'); 

// Modify the date to get the next weekday 
$date->modify('next weekday'); 

// Output the date 
echo $date->format('Y-m-d'); 

Die Sache, die `DateTime``so groß ist, macht, dass es sehr flexibel ist und macht es möglich, dass Sie nur zu‚versuchen‘Dinge wie die oben genannten.

Viel Glück!

+0

Danke. Ihr Code war wirklich kurz, aber wenn Sie sich Alessandros Code ansehen, berechnet er, wo der nächste Wochentag ist, also die richtige Antwort. Ihr Code springt einfach zum nächsten Tag, auch wenn der aktuelle Tag ein Wochentag ist. Du kannst das aber mit einem verhindern wenn du es doch am kürzesten haben willst :) – Erik

+0

@ErikEdgren Ich habe meine Antwort geändert. Es springt jetzt einen Tag zurück, so dass, wenn heute ein Wochentag ist, es zu heute springen wird. Sonst springt es bis Montag :) – Peter

+0

Schön :) Aber es tut noch immer nicht so, wie ich es will: P Bitte schaue mein Beispiel in meiner Frage an. – Erik

Verwandte Themen