2011-01-26 22 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

答えて

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

+13

これは同じことですが、コードを読んでいる人にとって明示的なチェックがより明白だと思います。 – ThiefMaster

+2

もう一度それがコメントのためです。 –

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エディタなしで、参照することは困難です私の場合)。そこで私は修正版をここに掲載します。

+0

また、クォートされたtrueまたはfalseを返してはいけません。 – alex

+0

@alex:結果を確認するのに "echo"を使用します。そうです。アドバイスをいただきありがとうございます。 –

+10

あなたの変数名は吸う。 – ThiefMaster

-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"拡張や "IntlDateFormatter"のような他のn1クラスよりもうまく動作するので、idn変換に使用します。

私が言いたいのは、「intl」拡張には国際的な多くの国(例えば、サウジアラビアでは日曜日は週末ではありません)に対応できる「IntlCalendar」というクラスがあります。 IntlCalendarには、そのためのメソッドIntlCalendar::isWeekendがあります。たぶんあなたたちはそれを打つことができます、私は "これはほぼすべての国のために働く"ことが、これらのintlクラスの事実です。

EDIT: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; 
} 

、あなたがのDateTime :: createFromFormat

function isWeekend($date) { 
    $inputDate = DateTime::createFromFormat("d-m-Y", $date, new DateTimeZone("Europe/Amsterdam")); 
    return $inputDate->format('N') >= 6; 
} 
を使用することができます

この方法の美しさは、あなたが変更することなく、タイムゾーンを指定することができるということです他のスクリプト(例えばWordpressなど)で副作用を引き起こす可能性のあるPHPの世界的なタイムゾーン。

+0

あなたのupvoteを持っていますが、週の余分な日を追加することを決めたときに私の仲間は警告しています。 – Tricky

4

あなたが使用したい場合があり、上記のPHP 5.5以降PHP 7を使用している場合:

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

、今日は週末と「偽」でない場合であれば、それは「真」を返します。

関連する問題