تتوقف أيام عمل PHP في عطلات نهاية الأسبوع ، قم بإنشاء تاريخ بدء جديد يوم الاثنين

StackOverflow https://stackoverflow.com/questions/3439531

  •  27-09-2019
  •  | 
  •  

سؤال

مرحبًا بالفعل ، أنا أستخدم هذا الرمز من سؤال آخر - والذي يضيف يومين إضافيين إلى نهاية اليوم في حالة عطلات نهاية الأسبوع

function add_business_days($startdate,$buisnessdays,$holidays,$dateformat){
  $i=1;
  $dayx = strtotime($startdate);
  while($i < $buisnessdays){
   $day = date('N',$dayx);
   $datex = date('Y-m-d',$dayx);
   if($day < 6 && !in_array($datex,$holidays))$i++;
   $dayx = strtotime($datex.' +1 day');
  }
  return date($dateformat,$dayx);
 }

تشكل هذه الوظيفة جزءًا من إخراج JSON الذي يتم عرضه في تقويم jQuery - فهي تلتقط startDate و enddate ويجعلها.

هل من الممكن إنشاء رمز يرجع مخرجات بحيث عندما يصل إلى عطلة نهاية الأسبوع ، فإنه يخلق تاريخًا للإنهاء ، ويتخطى يوم الاثنين ، ثم يستمر تاريخ البدء ثم يستمر حتى يصل إلى الطرف الأصلي؟

x = date('w');
if (x != 6) {
while (x != 6) {
//start adding days to start date
}
} else {
//create new enddate = current iteration of dates currentdate;

//then new start (add two days to it to get to monday) currentdate + 2 = newstartdate
//redo above till you get to original end date
هل كانت مفيدة؟

المحلول

لست متأكدًا بنسبة 100 ٪ بشأن ما يفعله السؤال/الوظيفة حقًا ، لكن (إذا خمنت بشكل صحيح) ، فإليك فكرة.

function add_business_days($startdate, $businessdays, $holidays, $dateformat)
{
    $start = new DateTime($startdate);
    $date  = new DateTime($startdate);
    $date->modify("+{$businessdays} weekdays");

    foreach ($holidays as $holiday) {
        $holiday = new DateTime($holiday);
        // If holiday is a weekday and occurs within $businessdays of the $startdate
        if ($holiday->format('N') < 6 && $holiday >= $start && $holiday <= $date) {
            $date->modify("+1 weekday");
        }
    }
    return $date->format($dateformat);
}

يضيف المنطق أساسا $businessdays أيام الأسبوع حتى تاريخ البدء ؛ ثم يتحقق من أي عطلات في نطاق التاريخ ، في حالة حدوث أي عطلات ، يتم زيادة التاريخ النهائي حسب الاقتضاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top