Esta función parece devolver solo falso. ¿Alguno de ustedes está recibiendo lo mismo? Estoy seguro de que estoy pasando por alto algo, sin embargo, ojos frescos y todo eso ...
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";
}
}
Llamo a la función usando lo siguiente:
$isthisaweekend = isweekend('2011-01-01');
true
yfalse
no se deben citar como cadenas. Además, su código debería dar un error de análisis y ni siquiera ejecutarse debido al error}
en su if.Respuestas:
Si tiene PHP> = 5.1:
function isWeekend($date) { return (date('N', strtotime($date)) >= 6); }
de otra manera:
function isWeekend($date) { $weekDay = date('w', strtotime($date)); return ($weekDay == 0 || $weekDay == 6); }
fuente
return date('w', strtotime($date)) % 6 == 0
es un poco más corto.Otra forma es utilizar la clase DateTime , de esta forma también puede especificar la zona horaria. Nota: PHP 5.3 o superior.
// For the current date function isTodayWeekend() { $currentDate = new DateTime("now", new DateTimeZone("Europe/Amsterdam")); return $currentDate->format('N') >= 6; }
Si necesita poder verificar una determinada cadena de fecha, puede usar DateTime :: createFromFormat
function isWeekend($date) { $inputDate = DateTime::createFromFormat("d-m-Y", $date, new DateTimeZone("Europe/Amsterdam")); return $inputDate->format('N') >= 6; }
La belleza de esta forma es que puede especificar la zona horaria sin cambiar la zona horaria globalmente en PHP, lo que podría causar efectos secundarios en otros scripts (por ejemplo, Wordpress).
fuente
Si está utilizando PHP 5.5 o PHP 7 anterior, es posible que desee utilizar:
function isTodayWeekend() { return in_array(date("l"), ["Saturday", "Sunday"]); }
y devolverá "verdadero" si hoy es fin de semana y "falso" si no.
fuente
Aquí:
function isweekend($year, $month, $day) { $time = mktime(0, 0, 0, $month, $day, $year); $weekday = date('w', $time); return ($weekday == 0 || $weekday == 6); }
fuente
La versión de trabajo de su código (de los errores señalados por 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"; } ?>
El "{" perdido es difícil de ver, especialmente sin un editor PHP decente (en mi caso). Así que publico la versión corregida aquí.
fuente
Para los tipos como yo, que no son minimalistas, existe una extensión PECL llamada " intl ". Lo uso para la conversión de idn ya que funciona mucho mejor que la extensión "idn" y algunas otras clases n1 como "IntlDateFormatter".
Bueno, lo que quiero decir es que la extensión "intl" tiene una clase llamada "IntlCalendar" que puede manejar muchos países internacionales (por ejemplo, en Arabia Saudita, el domingo no es un día de fin de semana). El IntlCalendar tiene un método IntlCalendar :: isWeekend para eso. Tal vez ustedes lo intenten, me gusta el hecho de que "funciona para casi todos los países" en estas clases internacionales.
EDITAR: No estoy seguro, pero desde PHP 5.5.0, la extensión intl se incluye con PHP (--enable-intl).
fuente
Esto funciona para mí y es reutilizable.
function isThisDayAWeekend($date) { $timestamp = strtotime($date); $weekday= date("l", $timestamp ); if ($weekday =="Saturday" OR $weekday =="Sunday") { return true; } else {return false; } }
fuente