All Tools / Blog / दो तारीखों के बीच दिन कैसे कैलकुलेट करें

दो तारीखों के बीच दिन कैसे कैलकुलेट करें

4 min read

दो तारीखों के बीच दिन गिनना आसान लगता है, लेकिन हर भाषा इसे थोड़ा अलग तरीके से handle करती है — और edge cases (DST, timezone, leap year) अनगिनत off-by-one bugs की जड़ हैं। यहाँ आपके इस्तेमाल के tools में इसे सही तरीके से करने का तरीका बताया गया है।

JavaScript

सबसे साफ़ तरीका है दोनों dates parse करें, घटाएं, और milliseconds को days में बदलें।

function daysBetween(date1, date2) {
    const d1 = new Date(date1);
    const d2 = new Date(date2);
    const msPerDay = 1000 * 60 * 60 * 24;
    return Math.abs(Math.round((d2 - d1) / msPerDay));
}

console.log(daysBetween("2024-01-01", "2024-12-31"));
// 365 (2024 leap year है)

console.log(daysBetween("2025-03-01", "2026-03-01"));
// 365

Math.floor() की जगह Math.round() DST transitions के आसपास 1-घंटे के edge case को handle करता है — बिना इसके, DST boundary पार करने वाली 365-दिन की range में कभी-कभी 365 की जगह 364 मिलता है।

date-fns (production के लिए recommended):

import { differenceInCalendarDays } from 'date-fns';

const days = differenceInCalendarDays(new Date('2024-12-31'), new Date('2024-01-01'));
console.log(days); // 365

differenceInCalendarDays पार की गई calendar day boundaries गिनता है, जो "last login के बाद से दिन" जैसी चीज़ों के लिए आमतौर पर सही रहता है।

Python

from datetime import date

def days_between(date1: str, date2: str) -> int:
    d1 = date.fromisoformat(date1)
    d2 = date.fromisoformat(date2)
    return abs((d2 - d1).days)

print(days_between("2024-01-01", "2024-12-31"))
# 365

print(days_between("2025-03-01", "2026-03-01"))
# 365

Python की datetime.date subtraction एक timedelta object return करती है। .days attribute integer days number देता है — कोई DST problem नहीं क्योंकि date objects में timezone component नहीं होता।

Timezone-aware datetimes के लिए:

from datetime import datetime, timezone

def days_between_aware(dt1: str, dt2: str) -> int:
    # ISO 8601 timezone info के साथ
    d1 = datetime.fromisoformat(dt1)
    d2 = datetime.fromisoformat(dt2)
    return abs((d2 - d1).days)

Excel

Excel dates को serial numbers के रूप में store करता है (1 जनवरी 1900 से दिन), इसलिए subtraction सिर्फ़ arithmetic है।

Simple subtraction:

=B1 - A1

अगर A1 2024-01-01 है और B1 2024-12-31, तो result 365 है। Cell को date नहीं, number के रूप में format करें — वरना Excel result को date की तरह दिखाएगा।

DAYS function (साफ़ तरीका):

=DAYS(B1, A1)

DAYS(end_date, start_date) उनके बीच के दिन return करता है। End start से बाद है तो positive, पहले है तो negative।

DATEDIF (legacy लेकिन widely used):

=DATEDIF(A1, B1, "D")

DATEDIF Lotus 1-2-3 से आया undocumented legacy function है। Day differences के लिए reliable है। "D" argument total days return करता है; "M" complete months; "Y" complete years।

वर्किंग डेज़ (weekends छोड़कर)

// JavaScript
function workingDaysBetween(start, end) {
    let count = 0;
    const current = new Date(start);
    const endDate = new Date(end);
    while (current < endDate) {
        const day = current.getDay();
        if (day !== 0 && day !== 6) count++;
        current.setDate(current.getDate() + 1);
    }
    return count;
}
# Python
from datetime import date, timedelta

def working_days_between(start: str, end: str) -> int:
    d1, d2 = date.fromisoformat(start), date.fromisoformat(end)
    count = 0
    current = d1
    while current < d2:
        if current.weekday() < 5:  # 0=सोम, 4=शुक्र
            count += 1
        current += timedelta(days=1)
    return count

Excel:

=NETWORKDAYS(A1, B1)

NETWORKDAYS weekends अपने आप बाहर करता है और तीसरे argument में छुट्टियों की range optionally लेता है।

Date math क्यों मुश्किल है

Daylight Saving Time — जिस दिन clock बदलता है उस दिन 23 या 25 घंटे होते हैं। अगर date objects की जगह timestamps घटा रहे हैं, तो 365 दिन कभी-कभी milliseconds में 364 दिन जैसे लगते हैं।

Timezones — JavaScript में new Date("2024-01-01") UTC midnight parse होता है। अगर local timezone UTC-5 है, तो locally actually 31 दिसंबर है। हमेशा timezone explicitly specify करें या UTC dates इस्तेमाल करें।

Leap years — 2024 में 366 दिन हैं। 1 जनवरी 2024 से शुरू होने वाली "1-साल" की range में 366 दिन हैं, 365 नहीं।

Date-specific libraries (date-fns, dateutil, pandas) इन सब को सही handle करती हैं। Manual millisecond तरीका काम करता है लेकिन DST safety के लिए Math.round() trick ज़रूरी है।

मुख्य बातें

  • JavaScript: Math.round((d2 - d1) / 86400000) या date-fns का differenceInCalendarDays
  • Python: (date2 - date1).daysdate objects के साथ कोई DST problem नहीं।
  • Excel: =DAYS(B1, A1) या =DATEDIF(A1, B1, "D")
  • केवल working days के लिए: Excel में NETWORKDAYS; Python में weekday() < 5 के साथ loop।
  • JavaScript में DST transitions से बचने के लिए Math.floor नहीं, Math.round इस्तेमाल करें।