Ta funkcja wydaje się zwracać tylko fałsz. Czy ktoś z was ma to samo? Jestem pewien, że coś przeoczę, jednak świeże oczy i to wszystko ...
function isweekend($date){
$date = strtotime($date);
$date = date("l", $date);
$date = strtolower($date);
echo $date;
if($date == "saturday" || $date == "sunday") {
return "true";
} else {
return "false";
}
}
Wywołuję funkcję, używając następującego:
$isthisaweekend = isweekend('2011-01-01');
true
ifalse
nie powinny być cytowane jako ciągi. Również twój kod powinien dawać błąd parsowania i nawet nie działać w ogóle z powodu zbłąkanego}
if.Odpowiedzi:
Jeśli masz PHP> = 5.1:
function isWeekend($date) { return (date('N', strtotime($date)) >= 6); }
Inaczej:
function isWeekend($date) { $weekDay = date('w', strtotime($date)); return ($weekDay == 0 || $weekDay == 6); }
źródło
return date('w', strtotime($date)) % 6 == 0
jest trochę krótsze.Innym sposobem jest użycie klasy DateTime , w ten sposób można również określić strefę czasową. Uwaga: PHP 5.3 lub nowszy.
// For the current date function isTodayWeekend() { $currentDate = new DateTime("now", new DateTimeZone("Europe/Amsterdam")); return $currentDate->format('N') >= 6; }
Jeśli potrzebujesz mieć możliwość sprawdzenia określonego ciągu daty, możesz użyć DateTime :: createFromFormat
function isWeekend($date) { $inputDate = DateTime::createFromFormat("d-m-Y", $date, new DateTimeZone("Europe/Amsterdam")); return $inputDate->format('N') >= 6; }
Piękno tego sposobu polega na tym, że możesz określić strefę czasową bez globalnej zmiany strefy czasowej w PHP, co może powodować efekty uboczne w innych skryptach (np. Wordpress).
źródło
Jeśli używasz PHP 5.5 lub PHP 7 powyżej, możesz użyć:
function isTodayWeekend() { return in_array(date("l"), ["Saturday", "Sunday"]); }
i zwróci wartość „prawda”, jeśli dzisiaj jest weekend, i „fałsz”, jeśli nie.
źródło
Tutaj:
function isweekend($year, $month, $day) { $time = mktime(0, 0, 0, $month, $day, $year); $weekday = date('w', $time); return ($weekday == 0 || $weekday == 6); }
źródło
Działająca wersja Twojego kodu (z błędów wskazanych przez BoltClock):
<?php $date = '2011-01-01'; $timestamp = strtotime($date); $weekday= date("l", $timestamp ); $normalized_weekday = strtolower($weekday); echo $normalized_weekday ; if (($normalized_weekday == "saturday") || ($normalized_weekday == "sunday")) { echo "true"; } else { echo "false"; } ?>
Zabłąkany "{" jest trudny do zobaczenia, szczególnie bez porządnego edytora PHP (w moim przypadku). Dlatego zamieszczam tutaj poprawioną wersję.
źródło
Dla takich jak ja, którzy nie są minimalistami, istnieje rozszerzenie PECL o nazwie „ intl ”. Używam go do konwersji idn, ponieważ działa znacznie lepiej niż rozszerzenie „idn” i niektóre inne klasy n1, takie jak „IntlDateFormatter”.
Cóż, chcę powiedzieć, że rozszerzenie „intl” ma klasę o nazwie „IntlCalendar”, która może obsługiwać wiele krajów międzynarodowych (np. W Arabii Saudyjskiej niedziela nie jest dniem weekendowym). IntlCalendar ma do tego metodę IntlCalendar :: isWeekend . Może spróbujecie, podoba mi się fakt, że „to działa w prawie każdym kraju” na tych klasach.
EDYCJA: Nie do końca pewne, ale od PHP 5.5.0 rozszerzenie intl jest dołączane do PHP (--enable-intl).
źródło
To działa dla mnie i jest wielokrotnego użytku.
function isThisDayAWeekend($date) { $timestamp = strtotime($date); $weekday= date("l", $timestamp ); if ($weekday =="Saturday" OR $weekday =="Sunday") { return true; } else {return false; } }
źródło