بالنظر إلى تاريخين، ما هي أفضل طريقة للعثور على عدد أيام الأسبوع في PHP؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

العنوان واضح إلى حد كبير.بالنظر إلى تاريخين، ما هي أفضل طريقة للعثور على عدد أيام الأسبوع باستخدام PHP؟أيام الأسبوع من الاثنين إلى الجمعة.

على سبيل المثال، كيف يمكنني معرفة أن هناك 10 أيام أسبوع بينهما 31/08/2008 و 13/09/2008?

هل كانت مفيدة؟

المحلول

        $datefrom = strtotime($datefrom, 0);
        $dateto = strtotime($dateto, 0);

        $difference = $dateto - $datefrom;

        $days_difference = floor($difference / 86400);
        $weeks_difference = floor($days_difference / 7); // Complete weeks

        $first_day = date("w", $datefrom);
        $days_remainder = floor($days_difference % 7);

        $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
        if ($odd_days > 7) { // Sunday
            $days_remainder--;
        }
        if ($odd_days > 6) { // Saturday
            $days_remainder--;
        }

        $datediff = ($weeks_difference * 5) + $days_remainder;

من هنا: http://www.addedbytes.com/php/php-datediff-function/

نصائح أخرى

إذا كنت تقوم بإنشاء نظام فواتير، عليك أن تفكر في العطلات الرسمية، وعيد الفصح، وما إلى ذلك.ليس من السهل حسابها.

أفضل حل رأيته على الإطلاق هو إنشاء جدول بالأيام ونوعه مسبقًا في قاعدة بيانات SQL (صف في اليوم = 365 صفًا في السنة) ثم إجراء استعلام عدد بسيط مع التحديد المناسب (عبارة WHERE).

يمكنك العثور على هذا الحل الموصوف بالكامل في تفكير جو سيلكو في مجموعات:الجداول المساعدة والمؤقتة والافتراضية في SQL

إحدى الطرق هي تحويل التواريخ إلى طوابع زمنية يونكس باستخدام strtotime(...)، وطرح النتائج والغوص في 86400 (24*60*60):

$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;

الوقت المتوقع للوصول:أوه..كنت تقصد أيام الأسبوع كما في الاثنين والجمعة..لم أرى ذلك في البداية..

أفضل طريقة هي تكرار كل التواريخ الواقعة بين النطاق الزمني المحدد، والحصول على يوم من الأسبوع لكل تاريخ.إذا كان يومًا من أيام الأسبوع، قم بزيادة عداد معين.في نهاية العملية تحصل على عدد أيام الأسبوع.

إن وظائف PHP mktime() و date() (للعمل مع الطوابع الزمنية لـ UNIX) هي أصدقائك هنا.

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