Ответ 1
Если у вас PHP >= 5.1:
function isWeekend($date) {
return (date('N', strtotime($date)) >= 6);
}
иначе:
function isWeekend($date) {
$weekDay = date('w', strtotime($date));
return ($weekDay == 0 || $weekDay == 6);
}
Эта функция возвращает только false. Кто-нибудь из вас получает то же самое? Я уверен, что я что-то пропускаю, однако, свежие глаза и все такое...
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";
}
}
Я вызываю функцию, используя следующее:
$isthisaweekend = isweekend('2011-01-01');
Если у вас PHP >= 5.1:
function isWeekend($date) {
return (date('N', strtotime($date)) >= 6);
}
иначе:
function isWeekend($date) {
$weekDay = date('w', strtotime($date));
return ($weekDay == 0 || $weekDay == 6);
}
Другой способ - использовать класс DateTime, таким образом вы также можете указать часовой пояс. Примечание: PHP 5.3 или выше.
// For the current date
function isTodayWeekend() {
$currentDate = new DateTime("now", new DateTimeZone("Europe/Amsterdam"));
return $currentDate->format('N') >= 6;
}
Если вам нужно проверить определенную строку даты, вы можете использовать DateTime:: createFromFormat
function isWeekend($date) {
$inputDate = DateTime::createFromFormat("d-m-Y", $date, new DateTimeZone("Europe/Amsterdam"));
return $inputDate->format('N') >= 6;
}
Красота этого способа заключается в том, что вы можете указать часовой пояс без изменения глобального часового пояса в PHP, что может вызвать побочные эффекты в других сценариях (например, Wordpress).
Здесь:
function isweekend($year, $month, $day)
{
$time = mktime(0, 0, 0, $month, $day, $year);
$weekday = date('w', $time);
return ($weekday == 0 || $weekday == 6);
}
Рабочая версия вашего кода (из ошибок, отмеченных 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";
}
?>
Заблудившийся "{" трудно увидеть, особенно без достойного редактора PHP (в моем случае). Поэтому я размещаю исправленную версию здесь.
Если вы используете PHP 5.5 или PHP 7 выше, вы можете использовать:
function isTodayWeekend() {
return date("l") == "Saturday" or date("l") == "Sunday";
}
и он вернет "истину", если сегодня выходные и "ложные", если нет.
Для таких парней, как я, которые не являются минималистичными, существует расширение PECL под названием " intl". Я использую его для преобразования idn, поскольку он работает лучше, чем расширение idn, и некоторые другие классы n1, такие как "IntlDateFormatter".
Ну, я хочу сказать, что расширение "intl" имеет класс под названием "IntlCalendar", который может обрабатывать многие международные страны (например, в Саудовской Аравии, воскресенье не является выходным днем). Для этого IntlCalendar имеет метод IntlCalendar:: isWeekend. Может быть, вы, ребята, сделали это, мне нравится, что "это работает практически для каждой страны" на этих intl-классах.
EDIT: не совсем уверен, но с PHP 5.5.0 расширение intl связано с PHP (--enable-intl).
<?php
$strt_date = date_create('2013-11-11');
$end_date = date_create('2013-11-18');
date_sub($strt_date, date_interval_create_from_date_string('1 day'));
$interval = date_diff($strt_date, $end_date);
$num = $interval->format('%a');
for ($i = 0; $i < $num; $i++) {
date_add($strt_date, date_interval_create_from_date_string('1 day'));
$next_day = date_format($strt_date, 'd-m-Y');
echo "<br>";
$new_date = new DateTime($next_day);
$weeknum = $new_date->format('w');
if (($weeknum != 0) && ($weeknum != 6)) {
echo "not a holiday :$next_day ";
}
}
?>