अगर जाँच सप्ताहांत 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तार के रूप में उद्धृत नहीं किया जाना चाहिए। इसके अलावा आपके कोड को एक पार्स त्रुटि देनी चाहिए और }आपके आवारा होने के कारण बिल्कुल भी नहीं चलना चाहिए ।
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करना थोड़ा कम है।
जिम

23
हालांकि यह वही काम करता है, मैं कहूंगा कि कोड पढ़ने वाले व्यक्ति के लिए स्पष्ट जांच अधिक स्पष्ट है।
ThiefMaster

2
तो फिर से कि क्या टिप्पणियों के लिए कर रहे हैं।
स्टीफन सबाटिनी

13
वैसे, ऐसे लोग हैं जो कहते हैं कि कोड को बहुत सारी टिप्पणियों के बिना पठनीय होना चाहिए। अच्छा कोड पठनीय है - और जरूरी नहीं कि छोटा हो। # क्लेनकोड
विस्मय

परीक्षण और रखरखाव के लिए कम कोड वहाँ कम है। लेकिन अगर इसकी अपठनीयता परीक्षण और बनाए रखने के लिए कठिन है। क्या पठनीयता के बारे में एक कठिन और तेज़ नियम होना चाहिए, या अनुभव करने के लिए नीचे है?
लेटी

48

दूसरा तरीका डेटाइम क्लास का उपयोग करना है , इस तरह से आप टाइमज़ोन भी निर्दिष्ट कर सकते हैं। नोट: 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
अपने उत्थान को ले लो, लेकिन मुझमें पांडित्य आपको चेतावनी दे रहा है जब वे सप्ताह के एक अतिरिक्त दिन को जोड़ने का निर्णय लेते हैं तो यह सप्ताह का दिन हो सकता है :)
मुश्किल

"इस तरह से आप टाइमजोन भी निर्दिष्ट कर सकते हैं"। इस SO पोस्ट के अनुसार , आप वैकल्पिक तरीकों से भी समय-क्षेत्र निर्दिष्ट कर सकते हैं। हालांकि मैंने आपके समाधान का उपयोग किया है
Wouter Vanherck

11

यदि आप ऊपर PHP 5.5 या PHP 7 का उपयोग कर रहे हैं, तो आप उपयोग करना चाह सकते हैं:

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

और यह "सच" वापस आ जाएगा अगर आज सप्ताहांत है और "झूठा" यदि नहीं।


यह केवल अंग्रेजी-भाषा साइटों के लिए काम करेगा। इसे संशोधित किया जा सकता है, लेकिन कई भाषाओं वाली साइटों के लिए बोझिल हो जाएगा।
बॉब रे

1
@ याकूब रे ओह ठीक है मुझे खेद नहीं है कि मैंने इसे लिखा है
हार्वे

9

यहाँ:

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

8

आपके कोड का कार्य संस्करण (बोल्टकॉक द्वारा बताई गई त्रुटियों से):

<?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: मैं परिणाम की पुष्टि करने के लिए "इको" का उपयोग करता हूं, इसलिए .. यह बात है। सलाह के लिए धन्यवाद।
लोंग

2

मेरे जैसे लोगों के लिए, जो न्यूनतर नहीं हैं, एक PECL एक्सटेंशन है जिसे " intl " कहा जाता है " । मैं इसे idn रूपांतरण के लिए उपयोग करता हूं क्योंकि यह "idn" एक्सटेंशन और "IntlDateFormatter" जैसे कुछ अन्य n1 वर्गों की तुलना में बेहतर तरीके से काम करता है।

खैर, मैं जो कहना चाहता हूं, वह है "इंटल" एक्सटेंशन में "इंटलक्लेन्डर" नामक एक वर्ग है जो कई अंतरराष्ट्रीय देशों को संभाल सकता है (जैसे सऊदी अरब में, रविवार का दिन सप्ताहांत नहीं है)। IntlCalendar में एक विधि है IntlCalendar :: उसके लिए isWeekend । हो सकता है कि आप लोग इसे एक शॉट दें, मुझे यह पसंद है कि "यह लगभग हर देश के लिए काम करता है" इन इन-क्लास पर तथ्य।

संपादित करें: बहुत निश्चित नहीं है, लेकिन PHP 5.5.0 के बाद से, इंटल एक्सटेंशन को PHP (--able-intl) के साथ बांधा गया है।


0

यह मेरे लिए काम करता है और पुन: प्रयोज्य है।

function isThisDayAWeekend($date) {

    $timestamp = strtotime($date);

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

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

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.