2011-01-26 16 views
66

यह फ़ंक्शन केवल झूठी वापसी प्रतीत होता है। क्या आप में से कोई भी वही हो रहा है? मुझे यकीन है कि मैं कुछ अनदेखी कर रहा हूँ ताजा आँखें और जो कुछ कर रहा हूँ, हालांकि, ...यह जांचना कि दिनांक सप्ताहांत है 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

आपकी 'सत्य' और 'झूठी' को तारों के रूप में उद्धृत नहीं किया जाना चाहिए। इसके अलावा आपके कोड को एक पार्स त्रुटि देनी चाहिए और अपने अगर में भटकने की वजह से भी नहीं चलनी चाहिए। – 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 का उपयोग करते हैं तो 'वापसी दिनांक (' डब्ल्यू ', स्ट्रेटोटाइम ($ दिनांक) का उपयोग करके)% 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"; 
} 

?> 

आवारा "{", को देखने के लिए विशेष रूप से एक सभ्य पीएचपी संपादक के बिना (में मुश्किल है मेरा मामला)। तो मैं यहां सही संस्करण पोस्ट करता हूं।

+0

आपको भी सही या गलत उद्धृत नहीं करना चाहिए - या बेहतर अभी भी, बस स्थिति वापस कर दें। – alex

+0

@alex: परिणाम की पुष्टि करने के लिए मैं "गूंज" का उपयोग करता हूं, तो .. यह है। सलाह के लिए धन्यवाद। –

+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

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

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

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

28

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

+0

तय करें अपना अपवित्र ले लो, लेकिन मेरे अंदर पेडेंट आपको चेतावनी दे रहा है जब वे सप्ताह के अतिरिक्त दिन को जोड़ने का निर्णय लेते हैं, यह सिर्फ एक सप्ताह का हो सकता है :) – Tricky

4

आप PHP 5.5 या इससे पीएचपी 7 का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं:

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

और यह वापस आ जाएगी "सही" यदि आज सप्ताह के अंत में और "गलत" अगर नहीं है।

संबंधित मुद्दे