2011-01-26 91 views
66

此函數似乎只返回false。你們有沒有變得一樣?我敢肯定,我俯瞰的東西,但是,新鮮的眼光和所有...檢查日期是否爲週末PHP

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'); 
+12

你的'true`和`false`不應該被引用爲字符串。另外你的代碼應該給出一個分析錯誤,甚至根本就不會運行,因爲你的if中有````的流浪。 – BoltClock 2011-01-26 07:54:30

回答

174

如果您有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); 
} 
+6

如果您使用PHP <5,那麼使用`return date('w',strtotime($ date))%6 == 0`會稍微短一些。 – Jim 2012-01-16 14:25:59

+13

雖然這樣做是相同的,但我認爲對於閱讀代碼的人來說,顯式檢查更爲明顯。 – ThiefMaster 2012-01-16 15:21:24

+2

然後,這又是什麼意見。 – 2015-09-12 17:41:18

8

這裏:

function isweekend($year, $month, $day) 
{ 
    $time = mktime(0, 0, 0, $month, $day, $year); 
    $weekday = date('w', $time); 
    return ($weekday == 0 || $weekday == 6); 
} 
7

代碼的工作版本(從錯誤中所指出的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編輯器(在我的情況)。所以我在這裏發佈修正後的版本。

-2
<?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 "; 
    } 
} 
?> 
1

對於像我這樣並不簡約的人來說,有一個名爲「intl」的PECL擴展名。 我將它用於idn轉換,因爲它的工作方式比「idn」擴展和「IntlDateFormatter」等其他n1類更好。

嗯,我想說的是,「intl」擴展名有一個名爲「IntlCalendar」的類,它可以處理許多國際國家(例如在沙特阿拉伯,星期日不是週末日)。 IntlCalendar有一個方法IntlCalendar::isWeekend。也許你們給它一個鏡頭,我喜歡這個「幾乎每個國家都適用」這些國際班級的事實。

編輯:不太確定,但自PHP 5.5.0以來,intl擴展與PHP(--enable-intl)捆綁在一起。

28

另一種方法是使用DateTime類,這樣你也可以指定時區。 注意:PHP 5.3或更高版本。

// For the current date 
function isTodayWeekend() { 
    $currentDate = new DateTime("now", new DateTimeZone("Europe/Amsterdam")); 
    return $currentDate->format('N') >= 6; 
} 

如果您需要能夠檢查某個日期字符串,你可以使用日期時間:: createFromFormat

function isWeekend($date) { 
    $inputDate = DateTime::createFromFormat("d-m-Y", $date, new DateTimeZone("Europe/Amsterdam")); 
    return $inputDate->format('N') >= 6; 
} 

這種方式的好處是,你可以在不改變指定的時區PHP中的全局時區,這可能會導致其他腳本(例如Wordpress)的副作用。

4

如果你使用PHP 5.5或以上版本的PHP 7,您可能需要使用:

function isTodayWeekend() { 
    return date("l") == "Saturday" or date("l") == "Sunday"; 
} 

,它會返回「真」如果今天是週末,「假」,如果沒有。

相關問題