此函数似乎只返回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');
号
您的true和false不应作为字符串引用。另外,您的代码应该给出一个解析错误,甚至根本不运行,因为您的if中有多余的}。
如果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);
}
如果使用php<5,那么使用return date('w', strtotime($date)) % 6 == 0会稍微短一些。
虽然这做了同样的事情,但我想说,对于阅读代码的人来说,显式检查更为明显。
这也是评论的目的。
嗯,有人说代码应该是可读的,没有很多注释。好的代码是可读的,不一定短。#清洁代码
代码越少,测试和维护的代码就越少。但如果它不可读,就很难测试和维护。是否必须有一个关于可读性的硬性和快速规则,或者它取决于经验?
另一种方法是使用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指出的错误):
$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 in_array(date("l"), ["Saturday","Sunday"]);
}
。
如果今天是周末,则返回"真",否则返回"假"。
这对我有用,而且是可重用的。
function isThisDayAWeekend($date) {
$timestamp = strtotime($date);
$weekday= date("l", $timestamp );
if ($weekday =="Saturday" OR $weekday =="Sunday") { return true; }
else {return false; }
}
通过php 7.1测试,您还可以检查dow…。
对于像我这样的非极简主义者,有一个pecl扩展名叫做"intl"。我将它用于IDN转换,因为它比"IDN"扩展和其他一些N1类(如"intldateformatter")工作得更好。
好吧,我想说的是,"国际长途"分机有一个叫做"国际长途"的班,可以应付许多国际国家(例如,在沙特阿拉伯,星期天不是周末)。IntlCalendar有一个方法IntlCalendar::IsWeekend。也许你们可以试一试,我喜欢这些国际课程中的"它几乎适用于每个国家"这一事实。
编辑:不太确定,但是由于php 5.5.0,intl扩展与php(--enableintl)捆绑在一起。