날짜가 주말인지 확인 PHP


89

이 함수는 거짓 만 반환하는 것 같습니다. 당신 중 누구도 똑같이 받고 있습니까? 나는 내가 무언가를 간과하고 있다고 확신하지만, 신선한 눈과 모든 것 ...

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

15
귀하 true와는 false문자열로 인용 할 수 없습니다. 또한 코드는 구문 분석 오류를 제공해야 }하며 if 의 이탈 로 인해 전혀 실행되지 않아야 합니다.
BoltClock

답변:


215

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);
}

10
PHP <5를 사용하면 사용 return date('w', strtotime($date)) % 6 == 0이 조금 더 짧습니다.
Jim

23
그것이 똑같은 일을하지만, 코드를 읽는 사람에게는 명시 적 검사가 더 분명하다고 말하고 싶습니다.
ThiefMaster

2
그런 다음 다시 그것이 주석의 목적입니다.
Stephen Sabatini 2015 년

13
글쎄요, 많은 주석없이 코드를 읽을 수 있어야한다고 말하는 사람들이 있습니다. 좋은 코드는 가독성이 좋으며 반드시 짧지는 않습니다. #CleanCode
anweibel

코드가 적을수록 테스트 및 유지 관리 할 코드가 적습니다. 그러나 읽을 수 없으면 테스트하고 유지하기가 더 어렵습니다. 가독성에 대해 엄격하고 빠른 규칙이 있어야합니까, 아니면 경험해야합니까?
안락

48

또 다른 방법은 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)에서 부작용이 발생할 수 있습니다.


1
당신 upvote에를 가지고,하지만 그들은 그냥 평일 : 수 있습니다 일주일의 여분의 날 추가하기로 결정 때 내 안에 부유 당신을 경고한다
까다로운

"이 방법으로 시간대를 지정할 수도 있습니다". 이 SO 게시물 에 따르면 다른 방법으로 시간대를 지정할 수도 있습니다. 그래도 난 당신의 솔루션을 사용했습니다
WOUTER Vanherck

11

위의 PHP 5.5 또는 PHP 7을 사용하는 경우 다음을 사용할 수 있습니다.

function isTodayWeekend() {
    return in_array(date("l"), ["Saturday", "Sunday"]);
}

오늘이 주말이면 "true"를 반환하고 그렇지 않으면 "false"를 반환합니다.


이것은 영어 사이트에서만 작동합니다. 수정할 수는 있지만 여러 언어를 사용하는 사이트에서는 번거로울 수 있습니다.
Bob Ray

1
@Bob Ray 오 괜찮아요 미안 해요 제가 글을 쓰는 동안 알아 채지 못했어요
Harvey

9

여기:

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

8

코드의 작동 버전 (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 편집기 (제 경우) 없이는보기가 어렵습니다. 그래서 여기에 수정 된 버전을 게시합니다.


또한 인용 된 참 또는 거짓을 반환해서는 안됩니다. 아니면 조건 만 반환하는 것이 더 좋습니다.
alex

@alex : 결과를 확인하기 위해 "echo"를 사용하므로 그게 다입니다. 조언 해주셔서 감사합니다.
Hoàng Long 2011

2

저와 같이 미니멀하지 않은 사람들에게는 " intl " 이라는 PECL 확장이 있습니다. "idn"확장과 "IntlDateFormatter"와 같은 다른 n1 클래스보다 더 잘 작동하기 때문에 idn 변환에 사용합니다.

제가 말하고 싶은 것은 "intl"확장에는 많은 국제 국가를 처리 할 수있는 "IntlCalendar"라는 클래스가 있습니다 (예 : 사우디 아라비아에서는 일요일이 주말이 아님). IntlCalendar에는 IntlCalendar :: isWeekend 메서드 가 있습니다. 아마 여러분이 한 번 시도해보세요. 저는 이러한 국제 수업에서 "거의 모든 국가에서 작동한다"는 사실이 마음에 듭니다.

편집 : 확실하지는 않지만 PHP 5.5.0부터 intl 확장이 PHP와 함께 번들로 제공됩니다 (--enable-intl).


0

이것은 나를 위해 작동하며 재사용이 가능합니다.

function isThisDayAWeekend($date) {

    $timestamp = strtotime($date);

    $weekday= date("l", $timestamp );

    if ($weekday =="Saturday" OR $weekday =="Sunday") { return true; } 
    else {return false; }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.