حاسبة مدة التداخل بين فترتين زمنيتين
تقيس هذه الحاسبة بدقة مقدار الزمن المشترك بين فترتين صريحتين من التاريخ والوقت. أدخل بداية كل فترة ونهايتها بصيغة ISO 8601 متضمنة Z أو إزاحة UTC رقمية.
شغّل الأداة مجانًا
يحوّل الحساب جميع الحدود إلى خط زمني موحد وفق UTC، ثم يختار البداية الأحدث والنهاية الأسبق، ويعرض المدة المشتركة بالميلي ثانية والثواني والدقائق والساعات. تعيد الفترات المنفصلة أو التي تتلامس عند حد واحد القيمة صفر، مما يجعل النتيجة مناسبة للجدولة والفوترة والمراقبة وإعداد التقارير.
حدّد الفترتين بحدود واضحة لا لبس فيها
أدخل أربع قيم: بداية الفترة الأولى ونهايتها، ثم بداية الفترة الثانية ونهايتها. يجب أن تكون كل قيمة تاريخًا ووقتًا كاملين بصيغة ISO 8601، وأن تتضمن تاريخًا تقويميًا ووقتًا بالثواني وZ أو إزاحة صريحة مثل +02:00 أو -05:30. يمنع اشتراط الإزاحة تفسير الوقت المحلي بصورة مختلفة على جهاز آخر. يجب أن تسبق بداية كل فترة نهايتها. تتعامل الحاسبة مع الفترات بوصفها نطاقات نصف مفتوحة؛ فالبداية جزء من الفترة، أما النهاية فهي حد غير مشمول. تمنع هذه القاعدة احتساب اللحظة نفسها مرتين عندما تلتقي حجوزات أو ورديات أو نوافذ معالجة متتابعة. تُقبل من خانة واحدة إلى ثلاث خانات كسرية للثواني وتُوحّد إلى ميلي ثانية. يجري التحقق مباشرة من التاريخ ومكونات الوقت، لذلك تؤدي القيم المستحيلة إلى خطأ إدخال بدل نتيجة تبدو معقولة وهي خاطئة. استخدم الحقول الأربعة نفسها سواء توقعت وجود تداخل أم لم تتوقعه.
افهم آلية الحساب الحتمي وفق UTC
يضع الحساب الحدود الأربعة على خط زمني واحد وفق UTC قبل مقارنتها. تكون القيمة المنتهية بحرف Z محددة أصلًا وفق UTC. تُطرح الإزاحة الموجبة من القيمة، بينما تُضاف الإزاحة السالبة إليها. لذلك قد تمثل قيمتان مكتوبتان بصورة مختلفة اللحظة نفسها. يبدأ التداخل عند البداية الأحدث من البدايتين وينتهي عند النهاية الأسبق من النهايتين. إذا كانت تلك النهاية لاحقة للبداية المحسوبة، كان الفرق بينهما هو مدة التداخل؛ وإلا كانت المدة صفرًا بالضبط. يستخدم التنفيذ حسابات التقويم الميلادي وقيمًا صحيحة بالميلي ثانية، ولا يرجع إلى ساعة الجهاز أو الإعدادات المحلية أو قاعدة بيانات المناطق الزمنية أو الشبكة أو العشوائية أو Date في JavaScript. ولهذا تعطي المدخلات المتطابقة نتائج متطابقة دائمًا. يعرض الناتج المدة المحسوبة نفسها بالميلي ثانية والثواني والدقائق والساعات، كي تختار الوحدة الملائمة لقاعدة البيانات أو الفاتورة أو لوحة المتابعة أو قاعدة الجدولة لديك.
استخدم النتيجة بأمان في إجراءات العمل
استخدم مدة التداخل كلما احتجت إلى مقارنة نافذتين زمنيتين معلومتين، مثل مقارنة وردية بإجازة معتمدة، أو تشغيل جهاز بفترة تعرفة، أو حادث بنافذة خدمة، أو حجز بفترة إتاحة. تبين القيمة الموجبة مقدار الزمن المشترك، وليس مجرد وجود تقاطع. ويعني الصفر أن الفترتين منفصلتان أو أن إحداهما تنتهي في اللحظة نفسها التي تبدأ فيها الأخرى؛ وفي الحالتين لا يوجد زمن منقضٍ مشترك وفق قاعدة النطاق نصف المفتوح. عند حساب المال أو الحصص، استخدم overlap_milliseconds أو overlap_seconds بوصفه القيمة المصدر، ثم طبّق قاعدة التقريب الموثقة لديك بعد استلام النتيجة. لا تقرّب حدود الإدخال مسبقًا إلا إذا فرضت سياسة العمل ذلك. تقبل الخدمة الإزاحات الصريحة فقط، ولا تقبل أسماء مثل America/New_York ولا تستنتج قواعد التوقيت الصيفي. حوّل الأوقات المحلية إلى قيم مناسبة قبل الطلب. تبلغ كلفة طلب API مقدار $0.002، ويمكن تشغيل الحساب نفسه محليًا في المتصفح للفحص التفاعلي.
حالات الاستخدام
قياس تغطية الوردية
احسب الجزء من الوردية الذي يقع داخل نافذة تشغيل مأهولة أو مدفوعة أو معتمدة.
تخصيص زمن الحادث
قِس الجزء من مدة الانقطاع الذي وقع خلال فترة دعم أو خدمة منصوص عليها في العقد.
فحص تعارض الحجوزات
حدّد مقدار الزمن المشترك بين حجزين بدل الاكتفاء بإجابة نعم أو لا عن وجود التعارض.
الأسئلة الشائعة
ماذا يحدث عندما لا تتداخل الفترتان؟
تعيد حقول المدة الأربعة صفرًا. وينطبق ذلك أيضًا عندما تنتهي إحدى الفترتين لحظة بدء الأخرى تمامًا.
هل يمكن استخدام إزاحات UTC مختلفة؟
نعم. يمكن أن يستخدم كل حد Z أو إزاحة رقمية خاصة به، وتُقارن جميع الحدود على خط زمني موحد وفق UTC.
هل تدخل نقاط نهاية الفترة في الحساب؟
يستخدم الحساب فترات نصف مفتوحة؛ فتدخل البداية ولا تدخل النهاية. لذلك تكون المدة المشتركة بين الفترات المتجاورة صفرًا.
هل يعتمد الحساب على المنطقة الزمنية للخادم؟
لا. فهو يستخدم حسابات التقويم والإزاحة من دون Date أو قاعدة مناطق زمنية أو ساعة الجهاز أو الإعدادات المحلية.
ما تكلفة طلب API واحد؟
السعر هو $0.002 لكل طلب. ولا يترتب على التشغيل التفاعلي في المتصفح رسم API.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/date/overlap-duration \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T12:30:00Z","second_start":"2026-07-25T11:15:00+00:00","second_end":"2026-07-25T14:00:00+00:00"}'const res = await fetch("https://api.kit.forhosting.com/date/overlap-duration", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T12:30:00Z",
"second_start": "2026-07-25T11:15:00+00:00",
"second_end": "2026-07-25T14:00:00+00:00"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/overlap-duration",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T12:30:00Z",
"second_start": "2026-07-25T11:15:00+00:00",
"second_end": "2026-07-25T14:00:00+00:00"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/overlap-duration", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T12:30:00Z","second_start":"2026-07-25T11:15:00+00:00","second_end":"2026-07-25T14:00:00+00:00"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T12:30:00Z","second_start":"2026-07-25T11:15:00+00:00","second_end":"2026-07-25T14:00:00+00:00"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/overlap-duration", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T12:30:00Z",
"second_start": "2026-07-25T11:15:00+00:00",
"second_end": "2026-07-25T14:00:00+00:00"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.overlap_duration",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |