2010-11-23 13 views
39

क्या कार्य दिवस (सोमवार से शुक्रवार) को एक तारीख में जोड़ने के लिए strtotime का उपयोग करने का कोई तरीका है? या कुछ अन्य विधि? मुझे क्या करना चाहते हैं:PHP में कार्य दिवस (सोम-शुक्र)

date ('Y-m-j' , strtotime ('+3 working days')) 
+7

कुछ मध्य पूर्वी देशों में एक सप्ताह के अंत में एक काम सप्ताह गुरुवार को रविवार है के लिए। क्या आपने उनके बारे में सोचा है: ओ –

+2

यह काम करने के लिए है कि भविष्य में भुगतान के लिए समय सीमा स्थानीय घटना के लिए कितनी दिन है, इसलिए नहीं :-) – fredley

+0

आपको पवित्र दिनों के बारे में भी सोचना होगा। – yvoyer

उत्तर

79

आप काम करने के दिन के लिए सीमित कर रहे हैं, तो स्ट्रिंग काम करने के दिन का उपयोग करें।

echo date ('Y-m-j' , strtotime ('3 weekdays')); 

यह, 3 काम करने के दिन से आगे आप कूद चाहिए ताकि अगर यह गुरुवार है यह अतिरिक्त सप्ताह के अंत में समय जोड़ देगा।

स्रोत: http://www.php.net/manual/en/datetime.formats.relative.php

+39

नहीं * रास्ता। * यह काम करता है? क्या कुछ भी 'स्ट्रेटोटाइम()' नहीं कर सकता है? –

+0

@ पेक्का मैं कभी-कभी "10 महीने पहले महीने के पहले दिन" और "इस महीने के पहले दिन" जैसी चीज़ों की अक्षमता से खराब हो गया हूं। – Yahel

+1

हालांकि यह छोटी गाड़ी काम करता है: 'इको डेट (' वाई-एम-डी ', स्ट्रेटोटाइम (' 2011-03-27 + 5 सप्ताह के दिन ')); 1 अप्रैल को अपेक्षित, 3 अप्रैल को मिला। – zerkms

2

मैं जब काम करने के दिन की एक बड़ी राशि की आवश्यकता होगी, इस गाड़ी मिल गया है। मैं वर्तमान माह के पहले के बाद एक्स दिनों की व्यावसायिक दिनों की तलाश में था।

5 व्यावसायिक दिनों को जोड़ने के बाद पहली बार शानदार लग रहा था (जैसा कि @zerkms मिला है)।

यह मेरे लिए और अधिक सटीक साबित हुआ है।

function _getBusinessDayOfMonth($days) { 
     $time = strtotime(date("m/1/Y 00:00")); //finding # of business days after 1st of the month 
     $i = 0; //start with zero 
     while ($i < $days) { //loop through until reached the amount of weekdays 
      $time = strtotime("+1 day", $time); //Increase day by 1 
      if (date("N", $time) < 6) { //test if M-F 
       $i++; //Increase by 1 
      } 
     } 
     echo date("m/d/Y", $time); 
    } 
0

मैं एक समारोह आसानी से विकसित किया जा सकता है कि आप बस सप्ताह की वर्तमान दिन निर्यात कर सकते हैं कोई और आप दो और 5 के आधुनिक जोड़ने आप आसानी से काम करने के दिन दे देंगे कर सकते हैं लगता है।

function increaseWorkDay($workDayToProcess, $dayToAdd){ 
    if($workDayToProcess >= 4 && $workDayToProcess <= 6){ 
     $workDayToProcess= 4; 
    } 
    $workDayToProcess+= $dayToAdd; 

    return $workDayToProcess % 5; 
} 

और आप एक सरणी का उपयोग करके सप्ताह के नाम का निर्यात कर सकते हैं, इस विधि का वैकल्पिक रूप से उपयोग किया जा सकता है।

0

मैं इसे रिकर्सिवली करते हैं, के लिए मुझे

function add_work_days($date, $day){ 
    if($day == 0) 
     return $date; 

    $date->add(new DateInterval('P1D')); 

    if(!in_array($date->format('N'), array('6', '7'))) 
     $day--; 

    return add_work_days($date, $day); 
} 

$date = add_work_days(new DateTime(), 3); 
echo $date->format('d/m/Y'); 
0

काम पीएचपी < के पुराने संस्करणों 5,3

function AddWorkingDays($startDate, $adddays) 
{ 
    $retdate = $startDate; 
    $sign = "+"; 
    if($adddays < 0){ 
    $adddays = $adddays*-1; 
    $sign = "-"; 
    } 
    while ($adddays > 0) { 
    $retdate = date ('Y-m-d' , strtotime ("$retdate {$sign}1 day")); 

     $what_day = date("N", strtotime($retdate)); 
     if ($what_day != 6 && $what_day != 7) // 6 and 7 are weekend 
      $adddays--; 

    }; 

    return $retdate; 

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