डेट और टाइम टेस्टिंग क्या है?
डेट और टाइम टेस्टिंग घड़ी पर निर्भर व्यवहार — expiry, renewals, schedules, उम्र की सीमा, reports — को उन पलों पर जाँचती है जो मायने रखते हैं: हर boundary के ठीक पहले, ठीक उस पर और ठीक बाद, महीने और साल के अंत पर, 29 फ़रवरी को, DST बदलाव वाले दिनों पर और कई time zones में। चूँकि कोई टेस्ट के लिए 30 दिन इंतज़ार नहीं कर सकता, घड़ी को नियंत्रित बनाया जाता है (injected या fake clock, time-travel setting), या टेस्ट डेटा की तारीख़ें इस तरह खिसकाई जाती हैं कि उनके बीच के रिश्ते सही रहें।
गाइड पढ़ें: डेट और टाइम टेस्टिंग
डेट और टाइम टेस्ट सिम्युलेटर कैसे इस्तेमाल करें
- टेस्ट करने का नियम चुनें, जैसे 30 दिन के trial के लिए "तय अवधि के बाद expire"।
- शुरुआत वैसे लिखें जैसी वह नियम के zone की घड़ी पर दिखती है (2026-01-31 10:00), और zone चुनें, जैसे Asia/Riyadh।
- मात्रा और यूनिट सेट करें, और यह भी कि ठीक बाउंड्री वाले सेकंड पर नियम अब भी मान्य गिना जाए या नहीं।
- तुलना के लिए दूसरा zone चुनें (अक्सर UTC, जिसमें सर्वर समय स्टोर करते हैं) और daylight saving बदलावों के लिए कितने महीने आगे देखना है।
- पलों की तालिका पढ़ें: स्निपेट से अपने ऐप्लिकेशन की घड़ी हर पल पर freeze करें और जाँचें कि वह अपेक्षित स्थिति दिखाता है।
डेट और टाइम टेस्ट सिम्युलेटर की खूबियाँ
- पाँच तरह के नियम: तय अवधि के बाद expiry, तय deadline, बार-बार होने वाला renewal, उम्र की सीमा और रोज़ाना scheduled job
- टेस्ट करने के पल गिनाता है — expiry और deadline नियमों के लिए बाउंड्री से एक सेकंड पहले, ठीक उस पर और एक सेकंड बाद — और हर पल पर अपेक्षित स्थिति
- चुने गए IANA zone में look-ahead अवधि का हर daylight saving बदलाव सेकंड तक ढूँढता है, और ऐसे run time पर निशान लगाता है जो gap में पड़ते हैं या दो बार आते हैं
- महीनों या सालों वाली expiry के लिए महीने के अंत की clamping (31 जनवरी + 1 महीना) को JavaScript के Date#setMonth के नतीजे के साथ दिखाता है; renewals के लिए, पिछले renewal से गिनी गई तारीख़ों का खिसकना (drift)
- बाउंड्री की तुलना दूसरे zone से करता है (आपके सर्वर का UTC, या किसी दूसरे यूज़र का zone) और कैलेंडर का दिन बदलने पर चेतावनी देता है
- Playwright, Jest, Vitest, Java, Python (freezegun), .NET (FakeTimeProvider) या libfaketime के लिए fake-clock स्निपेट देता है, और पलों को CSV में एक्सपोर्ट करता है
डेट और टाइम टेस्ट सिम्युलेटर का उदाहरण
रियाद में 31 जनवरी से शुरू होने वाला 30 दिन का trial
इनपुट:
नियम: तय अवधि के बाद expire · शुरुआत: 2026-01-31 10:00 · Zone: Asia/Riyadh · 30 दिन · ठीक बाउंड्री पर: एक्सपायर हो चुका · दूसरा zone: UTCआउटपुट:
Expire होने का पल 2026-03-02T10:00:00+03:00 (2026-03-02T07:00:00Z, epoch 1772434800) · बीते घंटे 720
पल: 2026-03-02T09:59:59+03:00 → मान्य · 2026-03-02T10:00:00+03:00 → एक्सपायर्ड · 2026-03-02T10:00:01+03:00 → एक्सपायर्ड · 2 मार्च का अंत → एक्सपायर्ड (सिर्फ़ तारीख़ दिखाने वाला "2 मार्च तक मान्य" गुमराह करेगा), साथ में दोनों महीनों के अंत और नया साल
चेतावनी: Asia/Riyadh में कोई daylight saving बदलाव नहीं होता — ऐसा zone भी टेस्ट करें जिसमें यह बदलाव होता हैडेट और टाइम टेस्ट सिम्युलेटर कब इस्तेमाल करें
- फ़ीचर ship होने से पहले trials, coupons, password-reset links, token lifetimes और subscription renewals के टेस्ट केस लिखना
- Daylight saving बदलाव के आसपास लोकल समय पर चलने वाले scheduled job, रिपोर्ट या reminder की जाँच
- उम्र की जाँच (18+) का review, 29 फ़रवरी को जन्मे लोगों समेत
- डेवलपर को समझाना कि रियाद समय की 23:59 वाली deadline तीन घंटे देर से क्यों बंद हुई: वही wall-clock समय UTC के रूप में पढ़ लिया गया था
डेट और टाइम टेस्ट सिम्युलेटर के बारे में अक्सर पूछे जाने वाले सवाल
डेट और टाइम simulation testing क्या है?
यह समय पर निर्भर व्यवहार की टेस्टिंग है, जिसमें असली तारीख़ का इंतज़ार करने के बजाय सॉफ़्टवेयर जो घड़ी पढ़ता है उसे नियंत्रित किया जाता है — उसे चुने हुए पलों पर freeze किया या आगे-पीछे खिसकाया जाता है। यह टूल बताता है कि किसी नियम के लिए कौन-से पल चुनने हैं और हर पल पर सॉफ़्टवेयर को क्या करना चाहिए।
क्या सिम्युलेटर मेरे ऐप्लिकेशन की घड़ी बदलता है?
नहीं। यह पल और अपेक्षित नतीजे निकालता है, और आपके अपने टेस्ट फ़्रेमवर्क में घड़ी freeze करने के लिए एक स्निपेट देता है (Playwright, Jest, Vitest, Java Clock, freezegun, .NET FakeTimeProvider या libfaketime)। आपका ऐप्लिकेशन और सिस्टम की घड़ी जैसे थे वैसे ही रहते हैं।
31 जनवरी में एक महीना जोड़ने पर 28 फ़रवरी क्यों आता है?
ज़्यादातर date libraries छोटे महीने के आख़िरी दिन पर clamp करती हैं, जैसा java.time और यह टूल करते हैं। JavaScript का Date#setMonth ऐसा नहीं करता: वह overflow होकर मार्च में पहुँच जाता है। जब दोनों नतीजे अलग हों तो सिम्युलेटर चेतावनी देता है, क्योंकि टेस्ट को पक्का करना चाहिए कि प्रोडक्ट इनमें से कौन-सा तरीका अपनाता है।
यह कौन-से daylight saving बदलाव ढूँढता है?
शुरुआत से look-ahead सीमा तक zone के UTC offset का हर बदलाव, जो आपके ब्राउज़र के IANA time zone डेटा से निकाला जाता है और सेकंड तक सटीक होता है। जिन zones में daylight saving time नहीं है, जैसे Asia/Riyadh, उनमें कोई बदलाव नहीं दिखता, और टूल सुझाव देता है कि ऐसा zone भी टेस्ट करें जिसमें ये बदलाव होते हैं।
क्या कुछ सर्वर पर भेजा जाता है?
नहीं। गणना पूरी तरह आपके ब्राउज़र में चलती है; आप जो टाइप करते हैं वह न अपलोड होता है, न कहीं स्टोर होता है।
तकनीकी नोट्स
Wall-clock समय को ब्राउज़र के Intl time zone डेटा (ब्राउज़र के साथ आने वाला IANA tz database) से instant में बदला जाता है। जो समय उस zone में मौजूद ही नहीं है — spring-forward gap के अंदर — उसे आगे खिसकाया जाता है, और fall-back overlap में दो बार आने वाले समय के लिए पहला instant लिया जाता है; दोनों स्थितियाँ रिपोर्ट की जाती हैं। Daylight saving बदलाव zone के UTC offset को हर छह घंटे पर sample करके और हर बदलाव को bisection से सेकंड तक सटीक करके ढूँढे जाते हैं।
कैलेंडर यूनिट नियम के zone में जोड़ी जाती हैं: दिन जोड़ने पर daylight saving बदलाव के पार भी wall-clock समय वही रहता है (इसलिए 30 दिन 719 या 721 घंटे के हो सकते हैं, जिसे टूल रिपोर्ट करता है), और महीने व साल छोटे महीने के आख़िरी दिन पर clamp होते हैं, जैसा java.time का plusMonths करता है। मिनट और घंटे बिल्कुल सटीक बीता हुआ समय होते हैं।
सीमाएँ और कार्यप्रणाली
टूल आपके बताए नियम के लिए टेस्ट प्लान करता है और अपेक्षित नतीजा बताता है; यह आपके ऐप्लिकेशन की घड़ी नहीं बदलता और आपके टेस्ट नहीं चलाता।
Time zone के नियम आपके ब्राउज़र के tz डेटा से आते हैं। आपके सर्वर और डिवाइस tz का दूसरा version चला रहे हो सकते हैं, इसलिए हाल में बदला गया zone वहाँ अलग व्यवहार कर सकता है — उसी tz डेटा से टेस्ट करें जो आप deploy करते हैं।
Leap seconds मॉडल नहीं किए जाते, क्योंकि Unix time और ज़्यादातर सिस्टम उन्हें नज़रअंदाज़ करते हैं।
"Expiry वाले दिन के अंत तक मान्य" या 29 फ़रवरी को जन्मे व्यक्ति का जन्मदिन जैसे business नियम चुनाव का मामला हैं; टूल विकल्प दिखाता है, फ़ैसला नहीं करता।
संदर्भ
- Time Zone Databaseदुनिया के time zone और उनके ऐतिहासिक offset व daylight-saving नियमों का tz डेटाबेस, जो साल में कई बार अपडेट होता है।
- RFC 3339: Date and Time on the Internet: TimestampsISO 8601 का इंटरनेट टाइमस्टैम्प प्रोफ़ाइल (2026-09-23T10:15:00Z) और उसके ऑफ़सेट नियम।
- Clock — PlaywrightPlaywright टेस्ट हो रहे browser में समय कैसे नियंत्रित करता है: install, setFixedTime, setSystemTime, fastForward, runFor और pauseAt के साथ page.clock, और वह किन time APIs को override करता है।