ToolDeck

ماشین حساب تاریخ

تفاوت بین دو تاریخ را بر حسب سال، ماه، روز و موارد دیگر محاسبه کنید

محاسبه تاریخ چیست؟

محاسبه تاریخ یعنی پیدا کردن فاصله بین دو تاریخ تقویمی یا جمع/تفریق یک بازه زمانی از یک تاریخ مشخص. با یک ماشین‌حساب تاریخ آنلاین می‌توانید تعداد دقیق روزها، هفته‌ها، ماه‌ها و سال‌های بین هر دو تاریخ را بدون شمارش دستی حساب کنید. این ابزار در برنامه‌ریزی پروژه، حقوق قراردادی، حسابداری مالی و توسعه نرم‌افزار کاربرد دارد.

پیچیدگی محاسبه تاریخ از ساختار نامنظم تقویم گرگوری ناشی می‌شود. ماه‌ها ۲۸، ۲۹، ۳۰ یا ۳۱ روز دارند. سال‌ها بسته به قوانین سال کبیسه ۳۶۵ یا ۳۶۶ روز هستند. تفریق ساده اعداد روز نتایج نادرستی می‌دهد وقتی تاریخ‌ها ماه‌ها یا سال‌های مختلف را در بر می‌گیرند. الگوریتم‌های صحیح محاسبه اختلاف تاریخ باید این نامنظمی‌ها را با پردازش جداگانه هر واحد تقویمی مدیریت کنند.

محاسبه تاریخ در بسیاری از زمینه‌های برنامه‌نویسی به کار می‌آید: محاسبه انقضای توکن، زمان‌بندی رویدادهای تکراری، محاسبه مهلت‌های SLA، یا اندازه‌گیری زمان سپری شده بین ورودی‌های لاگ. در گردش‌کارهای DevOps، این موضوع به صورت بازه‌های اعتبار گواهینامه، مدت توقف استقرار و طول نوبت‌های آنکال ظاهر می‌شود. با اینکه اکثر زبان‌های برنامه‌نویسی کتابخانه‌های تاریخ دارند، یک ماشین‌حساب مبتنی بر مرورگر پاسخ‌های فوری برای بررسی‌های سریع بدون نوشتن کد، نصب وابستگی‌ها یا باز کردن REPL فراهم می‌کند.

چرا از این ماشین‌حساب تاریخ استفاده کنیم؟

فوراً ببینید بین هر دو تاریخ چه فاصله‌ای وجود دارد، با نتایج همزمان در چندین واحد. بدون فرمول، بدون کد، بدون ثبت‌نام.

نتایج فوری
دو تاریخ را انتخاب کنید و تفاوت را بر حسب سال، ماه، هفته، روز، ساعت و دقیقه مشاهده کنید. نتایج با تغییر هر یک از تاریخ‌ها به‌روزرسانی می‌شوند.
🔒
حریم خصوصی اول
تمام محاسبات در مرورگر شما انجام می‌شود. هیچ تاریخی به هیچ سروری ارسال نمی‌شود و هیچ چیزی ذخیره یا ثبت نمی‌گردد.
📅
واحدهای خروجی متعدد
نتیجه را در تمام واحدها به طور همزمان مشاهده کنید: مجموع روزها، هفته‌ها، ماه‌ها و تفکیک کامل سال-ماه-روز. نیازی به تبدیل بین واحدها نیست.
🔢
بدون نیاز به حساب کاربری
از ابزار بلافاصله استفاده کنید. ورود، اشتراک یا محدودیت استفاده وجود ندارد. نشانک بگذارید و هر بار که به بررسی سریع تاریخ نیاز دارید از آن استفاده کنید.

موارد استفاده ماشین‌حساب تاریخ

توسعه فرانت‌اند
بررسی کنید چند روز تا تاریخ راه‌اندازی یک ویژگی مانده، منطق تایمر شمارش معکوس را تأیید کنید، یا کامپوننت‌های انتخاب تاریخ را در مقابل بازه‌های مورد انتظار آزمایش کنید.
مهندسی بک‌اند
بازه‌های انقضای توکن را اعتبارسنجی کنید، مدت TTL حافظه نهان را محاسبه کنید، یا تأیید کنید که بازه‌های کار زمان‌بندی شده تاریخ‌های اجرای بعدی صحیح را تولید می‌کنند.
DevOps و SRE
فاصله بین مُهرهای زمانی رویداد در گزارش‌های پس از حادثه را اندازه‌گیری کنید، زمان‌های سرب انقضای گواهینامه را محاسبه کنید، یا مدت توقف استقرار در دوره‌های تعطیلات را تعیین کنید.
QA و آزمایش
داده‌های آزمایشی با آفست‌های تاریخ مشخص ایجاد کنید، منطق محدودیت سنی را با محاسبه سن‌های دقیق از تاریخ تولد تأیید کنید، یا مطمئن شوید که شرایط مرزی تاریخ به درستی مدیریت می‌شوند.
مدیریت پروژه
مدت اسپرینت را محاسبه کنید، تعداد روزهای کاری بین مایلستون‌ها را اندازه‌گیری کنید، یا با شمارش روزهای تقویمی از تاریخ شروع، جدول زمانی تحویل را تخمین بزنید.
دانشجویان و یادگیری
روزهای مانده تا امتحان را بشمارید، طول نیمسال تحصیلی را محاسبه کنید، یا پاسخ تکالیف مربوط به محاسبه تاریخ در درس‌های علوم کامپیوتر را تأیید کنید.

مرجع واحدهای مدت تاریخ

محاسبات اختلاف تاریخ شامل واحدهایی با طول متفاوت هستند. ماه‌ها و سال‌ها مدت ثابتی ندارند، به همین دلیل است که تقسیم ساده مجموع روزها می‌تواند نتایج نادرستی ایجاد کند. جدول زیر هر واحد و محدوده آن را فهرست می‌کند:

واحدمعادلتوضیح
1 year365 or 366 daysDepends on leap year
1 month28–31 daysVaries by month
1 week7 daysFixed
1 day24 hoursFixed (ignoring DST transitions)
1 hour3,600 secondsFixed
1 minute60 secondsFixed

فرمت‌های رایج تاریخ

هنگام کار برنامه‌نویسی با تاریخ‌ها، فرمت نحوه تجزیه رشته تاریخ را تعیین می‌کند. استفاده از فرمت اشتباه باعث باگ‌های پنهان می‌شود. ISO 8601 امن‌ترین انتخاب برای تبادل داده است زیرا مبهم نبوده و از منطقه زمانی پشتیبانی می‌کند. جدول زیر فرمت‌هایی را که بیشتر با آن‌ها روبرو می‌شوید فهرست می‌کند:

فرمتمثالاستفاده در
ISO 86012026-04-10T14:30:00ZAPIs, databases, logs
RFC 2822Fri, 10 Apr 2026 14:30:00 +0000Email headers, HTTP
Unix timestamp1775831400Epoch-based systems
US format04/10/2026User-facing (US locale)
European format10.04.2026User-facing (EU locale)
Short ISO2026-04-10HTML date inputs, SQL DATE

نمونه کد: محاسبه روزهای بین دو تاریخ

نمونه‌های کاری برای محاسبه اختلاف بین دو تاریخ در JavaScript، Python، Go و خط فرمان. هر قطعه کد محاسبه مجموع روزها و تفکیک واحد تقویمی را در صورتی که زبان از آن پشتیبانی می‌کند نشان می‌دهد.

JavaScript
// Calculate days between two dates
const start = new Date('2026-01-15')
const end = new Date('2026-04-10')
const diffMs = end.getTime() - start.getTime()
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))
console.log(diffDays) // → 85

// Get year, month, day breakdown
function dateDiff(a, b) {
  let years = b.getFullYear() - a.getFullYear()
  let months = b.getMonth() - a.getMonth()
  let days = b.getDate() - a.getDate()
  if (days < 0) {
    months--
    days += new Date(b.getFullYear(), b.getMonth(), 0).getDate()
  }
  if (months < 0) { years--; months += 12 }
  return { years, months, days }
}
console.log(dateDiff(start, end)) // → { years: 0, months: 2, days: 26 }
Python
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta

start = date(2026, 1, 15)
end = date(2026, 4, 10)

# Total days
diff = (end - start).days
print(diff)  # → 85

# Year/month/day breakdown (requires python-dateutil)
rd = relativedelta(end, start)
print(f"{rd.years}y {rd.months}m {rd.days}d")  # → 0y 2m 26d

# Add 90 days to a date
future = start + timedelta(days=90)
print(future)  # → 2026-04-15
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Date(2026, 1, 15, 0, 0, 0, 0, time.UTC)
	end := time.Date(2026, 4, 10, 0, 0, 0, 0, time.UTC)

	// Total duration
	diff := end.Sub(start)
	days := int(diff.Hours() / 24)
	fmt.Println(days) // → 85

	// Add 90 days
	future := start.AddDate(0, 0, 90)
	fmt.Println(future.Format("2006-01-02")) // → 2026-04-15
}
CLI (GNU date / macOS)
# Days between two dates (GNU coreutils)
echo $(( ($(date -d "2026-04-10" +%s) - $(date -d "2026-01-15" +%s)) / 86400 ))
# → 85

# Add 90 days to a date (GNU date)
date -d "2026-01-15 + 90 days" +%Y-%m-%d
# → 2026-04-15

# macOS (BSD date) — add 90 days
date -j -v+90d -f "%Y-%m-%d" "2026-01-15" +%Y-%m-%d
# → 2026-04-15

سوالات متداول

چگونه تعداد روزهای بین دو تاریخ را محاسبه کنم؟
تاریخ زودتر را از تاریخ دیرتر کم کنید تا اختلاف را بر حسب میلی‌ثانیه (یا نوع مدت بومی زبان شما) به دست آورید، سپس بر تعداد میلی‌ثانیه در یک روز (۸۶٬۴۰۰٬۰۰۰) تقسیم کنید. این مجموع روزهای سپری شده را می‌دهد. برای تفکیک تقویمی به سال، ماه و روز باقیمانده، باید هر واحد را به صورت جداگانه پردازش کنید زیرا ماه‌ها طول‌های متفاوتی دارند.
آیا اختلاف تاریخ شامل تاریخ شروع یا تاریخ پایان می‌شود؟
طبق قرارداد، اختلاف تاریخ روزهای بین دو تاریخ را شمارش می‌کند و شروع یا پایان را استثنا می‌کند. اگر اول ژانویه و دوم ژانویه را انتخاب کنید، نتیجه ۱ روز است. اگر مورد استفاده شما نیاز به شمارش فراگیر دارد (هر دو نقطه پایانی شامل می‌شوند)، ۱ را به نتیجه اضافه کنید. این ابزار از قرارداد پایان-استثنا که اکثر زبان‌های برنامه‌نویسی استفاده می‌کنند پیروی می‌کند.
سال‌های کبیسه چگونه در محاسبات تاریخ مدیریت می‌شوند؟
سال کبیسه با افزودن ۲۹ فوریه، سال را ۳۶۶ روز به جای ۳۶۵ روز می‌کند. قانون سال کبیسه گرگوری این است: بر ۴ بخش‌پذیر باشد، به استثنای قرون، که باید بر ۴۰۰ هم بخش‌پذیر باشند. پس ۲۰۲۴ و ۲۰۲۸ سال‌های کبیسه هستند، ۱۹۰۰ نبود، و ۲۰۰۰ بود. الگوریتم‌های اختلاف تاریخ که با واحدهای تقویمی (سال/ماه/روز) کار می‌کنند این را به صورت خودکار مدیریت می‌کنند. الگوریتم‌هایی که به مجموع روزها تبدیل می‌کنند باید روز اضافه را وقتی بازه از ۲۹ فوریه عبور می‌کند در نظر بگیرند.
تفاوت بین روزهای تقویمی و روزهای کاری چیست؟
روزهای تقویمی هر روز از جمله آخر هفته‌ها و تعطیلات را می‌شمارند. روزهای کاری (که روزهای کاری هم نامیده می‌شوند) شنبه‌ها، یکشنبه‌ها و تعطیلات عمومی را استثنا می‌کنند. این ابزار روزهای تقویمی را محاسبه می‌کند. برای تبدیل تقریبی به روزهای کاری، مجموع روزهای تقویمی را در ۵/۷ ضرب کنید. برای تعداد دقیق روزهای کاری، به یک تقویم تعطیلات برای حوزه قضایی مربوطه هم نیاز دارید.
آیا می‌توانم با اضافه کردن روز به تاریخ شروع، تاریخ آینده را محاسبه کنم؟
بله. در JavaScript، یک شیء Date بسازید و setDate(getDate() + n) را فراخوانی کنید. در Python، یک timedelta(days=n) به شیء date اضافه کنید. در Go، از time.AddDate(0, 0, n) استفاده کنید. این ابزار برای محاسبه اختلاف بین دو تاریخ مشخص طراحی شده، اما می‌توانید از آن برای تأیید محاسبات خود استفاده کنید: تاریخ شروع و تاریخ نتیجه مورد انتظار را وارد کنید و تأیید کنید که خروجی مجموع روزها با آفست اضافه شده مطابقت دارد.
چرا ابزارهای مختلف نتایج متفاوتی برای ماه‌های بین تاریخ‌ها می‌دهند؟
محاسبه ماه مبهم است زیرا ماه‌ها طول‌های متفاوتی دارند. ۳۱ ژانویه تا ۲۸ فوریه را در نظر بگیرید: آیا این ۱ ماه است یا ۰ ماه و ۲۸ روز؟ کتابخانه‌های مختلف انتخاب‌های متفاوتی می‌کنند. رایج‌ترین قرارداد (که توسط dateutil پایتون، Period جاوا و این ابزار استفاده می‌شود) یک ماه کامل را به عنوان رسیدن به همان روز از ماه یا آخرین روز معتبر ماه کوتاه‌تر می‌شمارد. همیشه بررسی کنید که کتابخانه شما از کدام قرارداد استفاده می‌کند وقتی نتایج را مقایسه می‌کنید.
آیا محاسبه تاریخ تحت تأثیر منطقه‌های زمانی قرار می‌گیرد؟
وقتی تاریخ‌ها را بدون مؤلفه زمانی (فقط سال-ماه-روز) انتخاب می‌کنید، محاسبه مستقل از منطقه زمانی است زیرا روی تاریخ‌های تقویمی عمل می‌کند، نه لحظه‌های زمانی مشخص. اگر نیاز دارید اختلاف بین دو لحظه مشخص (شامل زمان و منطقه زمانی) را محاسبه کنید، باید با مُهرهای زمانی کامل ISO 8601 کار کنید و هر دو را قبل از تفریق به UTC تبدیل کنید. این ابزار فقط روی تاریخ‌های تقویمی عمل می‌کند.