المدة الإجمالية للفترات الزمنية
الصق قائمة فترات زمنية واحصل على الوقت الذي تغطيه فعلًا: الفترتان من 10:00 إلى 12:00 ومن 11:00 إلى 13:00 بالتوقيت العالمي تغطيان 3 ساعات، لا 5 كما في الجمع البسيط. وتُدمج الفترات المتداخلة أو المتلامسة أولًا. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
غالبًا ما تحتفظ فرق العمليات ونصوص الرواتب وأدوات اتفاقية مستوى الخدمة بعدد كبير من الفترات الزمنية الصريحة التي تتداخل: نوبات الاستدعاء، وحجوزات المعدات، ونوافذ التوقف، أو الجلسات القابلة للفوترة. جمع كل فترة بطريقة ساذجة يعدّ الدقائق المشتركة مرتين. تقبل حاسبة المدة الإجمالية للفترات الزمنية قائمة من أزواج البداية والنهاية بصيغة ISO-8601، وتُطبّع كل حدّ إلى UTC مطلق بحساب ميلادي خالص، وتدمج الفترات التي تتداخل أو تلامس، وتعيد طول المدى المغطى بالميلي ثانية والثواني والساعات مع تفصيل بالأيام والساعات والدقائق والثواني. الحجوزات المتجاورة التي تلتقي عند طرف تصبح مقطعًا متصلًا، فلا تضخّم نقطة التماس ذات الطول الصفري المجموع أبدًا.
معنى المدة المغطاة بعد دمج التداخلات
المدة المغطاة مقياس اتحاد فتراتكم على خط الزمن المطلق، وليست مجموع كل طول خام. إذا حجزت أليس من العاشرة إلى الثانية عشرة وحجز بوب من الحادية عشرة إلى الثالثة عشرة في يوم UTC نفسه، فالمجموع الساذج خمس ساعات بينما المدى المغطى ثلاث ساعات فقط من العاشرة إلى الثالثة عشرة.
ينفّذ هذا الطرف خوارزمية الفرز والدمج الكلاسيكية: يُحوَّل كل بداية ونهاية إلى ميلي ثانية حقبة UTC، وتُرتَّب القائمة حسب وقت البداية، وكل فترة تالية إما تمدّ المقطع المفتوح الحالي عندما تبدأ عند نهايته أو قبله، أو تفتح مقطعًا جديدًا عند وجود فجوة موجبة. الفترات المتلامسة، مثل الانتهاء عند الثانية عشرة والبدء عند الثانية عشرة، تندمج في كتلة متصلة، وهو نموذج الزمن المتصل الصحيح للتغطية والإشغال وتوافر SLA. تُرفض الفترات ذات الطول الصفري والمعكوسة لأنها لا تعرّف مدى مفتوحًا موجبًا.
عقد الإدخال وحدود ISO وشكل الاستجابة
يجب أن يتضمن كل كائن حقلي السلسلة start وend بصيغة ISO-8601: سنة بأربعة أرقام وشهر ويوم، وقد يليها وقت يوم بالساعات والدقائق والثواني وجزء كسري اختياري للثانية. تعني Z الختامية UTC؛ والإزاحة الرقمية مثل زائد صفر اثنان نقطتان صفر صفر أو ناقص صفر خمسة نقطتان صفر صفر تنقل الحقول المحلية إلى UTC مطلق قبل الدمج. تُعامل قيم التاريخ فقط منتصف ليل UTC حتى تعمل نوافذ اليوم دون اختراع ساعة.
لا تُصدَر الحقول الاختيارية الفارغة أبدًا. فشل التحقق لا يستهلك الرصيد. أبقوا القائمة دون الحد الأقصى المنشور حتى تبقى عمال الحافة ضمن ميزانية الذاكرة مع تغطية دفعات واقعية.
أين يفيد حساب الوقت المغطى
تدمج منصات القوى العاملة والاستدعاء أجزاء النوبات حتى تحتسب الرواتب وقواعد الإرهاق تغطية متصلة بدل الساعات المزدوجة المتداخلة. تحسب أنظمة حجز المرافق والمختبرات إشغال غرفة أو جهاز عندما تتراكم الحجوزات، فتغذي لوحات الاستخدام دون دوال نافذة SQL مخصصة في كل تقرير. تحوّل صفحات الموثوقية والحالة فترات الحوادث الجزئية الكثيرة إلى طول توقف مغطى واحد لحساب SLA الشهري.
توحّد متتبعات وقت المشاريع سجلات الجلسات المكررة من عملاء الجوال وسطح المكتب التي سجّلت العمل نفسه مرتين بساعات مختلفة قليلًا. تستفيد مواقع المحتوى التي تترتب على المدة الإجمالية للفترات الزمنية من أداة حية يطابق مسارها المجاني في المتصفح مسار الأتمتة المدفوع على الوحدة النقية نفسها. اقرنوا هذه الأداة بتقاطع فترتين عندما تحتاجون تداخل نطاقين اثنين فقط، أو بمساعدات إضفاء الطابع البشري على المدة عندما تريدون نصًا مقروءًا من عدّ ثوانٍ واحد.
حالات الاستخدام
إجماليات تغطية الاستدعاء والنوبات
تدمج نوافذ الخدمة المتداخلة لفريق حتى تستخدم الرواتب وفحوصات الإرهاق الساعات المغطاة بدل عدّ النوبات المتزامنة مرتين.
إشغال الغرف والموارد
تجمع اتحاد حجوزات منضدة مختبر أو قاعة اجتماعات عند التداخل، لتقارير الاستخدام دون SQL خام.
توقف SLA من أعطال جزئية
تطوي فترات حوادث كثيرة في مدة توقف مغطاة واحدة لحساب التوافر الشهري وتصديرات صفحة الحالة.
الأسئلة الشائعة
هل تُحسب الدقائق المتداخلة مرتين؟
لا. تُرتَّب الفترات وتُدمَج قبل الجمع، فالتغطية المشتركة تساهم مرة واحدة فقط في المدة الإجمالية المغطاة.
ماذا لو لامست فترتان بعضهما عند طرف فقط؟
تندمجان في مقطع متصل. الحدود المتلامسة لا تُنشئ فجوة ولا تضيف مدة إضافية تتجاوز المدى الموحّد.
كم فترة يمكنني إدخالها؟
من فترة واحدة إلى 200 فترة في القائمة نفسها. وتحتاج كل فترة إلى بداية ونهاية، ويجب أن تسبق البداية النهاية تمامًا؛ أما الفترات المعدومة الطول أو المعكوسة فتُرفض.
هل يمكنني إدخال تواريخ دون وقت؟
نعم. التاريخ وحده يُقرأ على أنه منتصف الليل بالتوقيت العالمي، مما يسهّل العمل على مستوى الأيام. ويمكن أن يحمل الوقت الحرف Z أو إزاحة رقمية، ويُحوَّل كل شيء إلى التوقيت العالمي قبل الدمج.
كيف أعرف أي الفترات دُمجت؟
تعرض النتيجة كل جزء مدمج ببدايته ونهايته ومدته، وتبين عدد الفترات التي أدخلتها إلى جانب عددها بعد الدمج، حتى تتمكن من مراجعة المجموع.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/date/intervals-total-duration \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"intervals":[{"start":"2020-01-01T10:00:00Z","end":"2020-01-01T12:00:00Z"},{"start":"2020-01-01T11:00:00Z","end":"2020-01-01T13:00:00Z"}]}'const res = await fetch("https://api.kit.forhosting.com/date/intervals-total-duration", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"intervals": [
{
"start": "2020-01-01T10:00:00Z",
"end": "2020-01-01T12:00:00Z"
},
{
"start": "2020-01-01T11:00:00Z",
"end": "2020-01-01T13:00:00Z"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/intervals-total-duration",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"intervals": [
{
"start": "2020-01-01T10:00:00Z",
"end": "2020-01-01T12:00:00Z"
},
{
"start": "2020-01-01T11:00:00Z",
"end": "2020-01-01T13:00:00Z"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/intervals-total-duration", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"intervals":[{"start":"2020-01-01T10:00:00Z","end":"2020-01-01T12:00:00Z"},{"start":"2020-01-01T11:00:00Z","end":"2020-01-01T13:00:00Z"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"intervals":[{"start":"2020-01-01T10:00:00Z","end":"2020-01-01T12:00:00Z"},{"start":"2020-01-01T11:00:00Z","end":"2020-01-01T13:00:00Z"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/intervals-total-duration", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"intervals": [
{
"start": "2020-01-01T10:00:00Z",
"end": "2020-01-01T12:00:00Z"
},
{
"start": "2020-01-01T11:00:00Z",
"end": "2020-01-01T13:00:00Z"
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.intervals_total_duration",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تغذي الوحدة الحتمية نفسها الأداة المجانية في المتصفح وواجهة API المدفوعة مسبقًا، فتطابق تجهيزات التكامل المستمر الإنتاج بايتًا بايت. تفشل الأشكال غير الصالحة لـ ISO والنطاقات المعكوسة والقوائم الفارغة بـ invalid_input ولا تُحاسب.
معنى المدة المغطاة بعد دمج التداخلات
تُبلغ الاستجابة input_count مقابل merged_count لتروا قدر الدمج، وتسرد كل مقطع مدمج ببدايته ونهايته ومدته لمسارات التدقيق. استخدموا total_duration_ms عند الحاجة إلى مقياس صحيح أساسي؛ وtotal_duration_hours عندما تتوقع لوحات المعلومات رقم ساعات كسريًا مقربًا إلى اثنتي عشرة خانة عشرية مستقرة؛ وdays وhours وminutes وseconds معًا عند عرض سطر مقروء دون إعادة القسمة.
عقد الإدخال وحدود ISO وشكل الاستجابة
أرسلوا جسم JSON بمصفوفة intervals إلزامية من عنصر واحد إلى مئتين. بعد التطبيع يجب أن يكون start قبل end بصرامة؛ الحدود المتساوية أو المعكوسة تفشل بـ invalid_input مع فهرس الفترة. عند النجاح يتضمن الجسم input_count وmerged_count وtotal_duration_ms وtotal_duration_seconds وtotal_duration_hours وحقول التفصيل غير السالبة days وhours وminutes وseconds وmilliseconds وسلسلة منسّقة مضغوطة مثل صفر d ثلاثة h صفر m صفر s والمصفوفة المرتبة merged_intervals بأطراف ISO UTC وmethod بقيمة intervals_total_duration. مثال: نافذتان متداخلتان من العاشرة إلى الثانية عشرة ومن الحادية عشرة إلى الثالثة عشرة UTC تندمجان في مقطع من ثلاث ساعات وtotal_duration_ms يساوي عشرة ملايين وثمانمئة ألف.
أين تحقق واجهة API للمدة الإجمالية للفترات قيمتها
لأن التنفيذ pure parse من المستوى A، تكلف كل مكالمة ناجحة السعر الأساسي المنشور $0.002 بلا رموز نموذج ولا شبكة صادرة. ثبّتوا merged_intervals وtotal_duration_ms في الاختبارات حتى لا تغيّر إعادة الهيكلة دلالات الدمج عند التماس بصمت.
أسئلة تقنية
كيف أحسب المدة الإجمالية لفترات زمنية متداخلة؟
أرسلوا JSON مع intervals كمصفوفة من {start, end} بتواريخ ISO-8601. تدمج API التداخلات في UTC وتعيد total_duration_ms وtotal_duration_seconds وtotal_duration_hours وmerged_intervals.
ما أخطاء الإدخال المرفوضة؟
intervals فارغة أو مفقودة، وغير الكائنات، وسلاسل ISO غير الصالحة، وأيام التقويم المستحيلة، وstart غير السابق بصرامة لـ end تفشل بـ invalid_input ولا تُحاسب.
كم تكلفة أداة المدة الإجمالية للفترات الزمنية؟
الأداة في المتصفح مجانية. تستخدم طلبات API رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل مكالمة ناجحة؛ الإدخال غير الصالح لا يُحاسب.