PHP में NOW() फंक्शन: डेट और टाइम ऑप्टिमाइज़ेशन और परफॉरमेंस

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में NOW(): समय के बारे में वो बातें जो आप नहीं जानते

\n\n

हर PHP डेवलपर ने कभी न कभी SQL क्वेरी लिखी होगी जैसे INSERT INTO logs (created_at) VALUES (NOW())। यह बढ़िया काम करता है। लेकिन क्या होगा अगर मैं आपको बताऊं कि हर क्वेरी में MySQL फंक्शन NOW() का उपयोग करना हमेशा सबसे अच्छा तरीका नहीं है? क्या होगा अगर आपका प्रोजेक्ट लाखों क्वेरी प्रोसेस करता है? या फिर आपको पूरे स्क्रिप्ट के लिए एक समान समय चाहिए?

\n\n

इस लेख में, हम जानेंगे कि कैसे PHP में NOW() फंक्शन को इम्यूलेट किया जाए, एप्लिकेशन की परफॉरमेंस कैसे बढ़ाई जाए, और समय से जुड़ी सामान्य गलतियों से कैसे बचा जाए। आप जानेंगे कि कब PHP का NOW() एनालॉग डेटाबेस से क्वेरी करने से ज़्यादा तेज़ होता है, और टाइमज़ोन के साथ काम करने में क्या-क्या चुनौतियाँ हैं।

\n\n
\n\n

1. NOW() क्या है और इसे PHP में क्यों इम्यूलेट करें?

\n\n

NOW() MySQL (और अन्य DBMS) का एक बिल्ट-इन फंक्शन है जो वर्तमान दिनांक और समय को YYYY-MM-DD HH:MM:SS फॉर्मेट में लौटाता है। यह सब ठीक लगता है, लेकिन कुछ बारीकियाँ हैं:

\n\n
    \n
  • डेटाबेस पर लोड: हर बार NOW() कॉल करने का मतलब है एक अलग क्वेरी सर्वर को भेजना। अगर आप 10,000 पंक्तियाँ इन्सर्ट कर रहे हैं, तो आप 10,000 बार क्वेरी भेजेंगे, जवाब लेंगे, और फिर डेटा इन्सर्ट करेंगे।
  • \n
  • अलग-अलग समय: अगर आपकी स्क्रिप्ट कुछ सेकंड चलती है, तो अलग-अलग क्वेरी में NOW() अलग समय लौटा सकता है (हालांकि अंतर मिलीसेकंड का होता है, लेकिन लॉग के लिए यह महत्वपूर्ण हो सकता है)।
  • \n
  • पोर्टेबिलिटी: DBMS बदलने पर (जैसे PostgreSQL या SQLite) NOW() काम नहीं कर सकता या अलग तरीके से काम कर सकता है।
  • \n
\n\n

समाधान: PHP साइड पर समय की गणना करें और इसे पैरामीटर के रूप में पास करें। इससे आपको सभी ऑपरेशन के लिए एक समान समय मिलेगा, डेटाबेस पर लोड कम होगा, और कोड यूनिवर्सल बनेगा।

\n\n
\n\n

2. PHP में NOW() कैसे लागू करें: तीन सिद्ध तरीके

\n\n

2.1. क्लासिक date('Y-m-d H:i:s')

\n\n

सबसे आसान और तेज़ तरीका है बिल्ट-इन फंक्शन date() का उपयोग करना:

\n\n
<?php\n$now = date('Y-m-d H:i:s');\necho $now; // 2025-01-15 14:30:00\n?>
\n\n

फायदे: हर जगह काम करता है, मेमोरी का कम से कम उपयोग, अतिरिक्त क्लास लोड करने की ज़रूरत नहीं।
\nनुकसान: php.ini (date.timezone) में सेट टाइमज़ोन पर निर्भर करता है।

\n\n

2.2. ऑब्जेक्ट-ओरिएंटेड DateTime

\n\n

PHP का आधुनिक मानक है DateTime क्लास। यह ज़्यादा लचीला और सुविधाजनक है:

\n\n
<?php\n$now = new DateTime();\necho $now->format('Y-m-d H:i:s'); // 2025-01-15 14:30:00\n?>
\n\n

आप स्पष्ट रूप से टाइमज़ोन सेट कर सकते हैं:

\n\n
<?php\n$timezone = new DateTimeZone('Asia/Kolkata');\n$now = new DateTime('now', $timezone);\necho $now->format('Y-m-d H:i:s'); // 2025-01-15 20:00:00 (IST)\n?>
\n\n

2.3. माइक्रोसेकंड के साथ DateTimeImmutable

\n\n

सटीक माप या उच्च डिटेल वाले लॉग के लिए DateTimeImmutable का उपयोग करें (यह मूल ऑब्जेक्ट को नहीं बदलता):

\n\n
<?php\n$now = new DateTimeImmutable();\necho $now->format('Y-m-d H:i:s.u'); // 2025-01-15 14:30:00.123456\n?>
\n\n

सलाह: अगर आपको सिर्फ डेटाबेस में इन्सर्ट करने के लिए समय चाहिए, तो date() का उपयोग करें - यह DateTime से 10-15% तेज़ है।

\n\n
\n\n

3. परफॉरमेंस ऑप्टिमाइज़ेशन: टेस्ट और तुलना

\n\n

चलिए एक सरल बेंचमार्क करते हैं। 100,000 इटरेशन के लूप में तीन तरीकों से वर्तमान समय प्राप्त करने की तुलना करें:

\n\n
<?php\n$iterations = 100000;\n\n// तरीका 1: date()\n$start = microtime(true);\nfor ($i = 0; $i < $iterations; $i++) {\n    $now = date('Y-m-d H:i:s');\n}\n$time1 = microtime(true) - $start;\n\n// तरीका 2: DateTime\n$start = microtime(true);\nfor ($i = 0; $i < $iterations; $i++) {\n    $now = new DateTime();\n    $now->format('Y-m-d H:i:s');\n}\n$time2 = microtime(true) - $start;\n\n// तरीका 3: DateTimeImmutable\n$start = microtime(true);\nfor ($i = 0; $i < $iterations; $i++) {\n    $now = new DateTimeImmutable();\n    $now->format('Y-m-d H:i:s');\n}\n$time3 = microtime(true) - $start;\n\necho \"date(): $time1 सेकंड\\n\";\necho \"DateTime: $time2 सेकंड\\n\";\necho \"DateTimeImmutable: $time3 सेकंड\\n\";\n?>
\n\n

आमतौर पर, date() सबसे तेज़ होता है, उसके बाद DateTime और फिर DateTimeImmutable। लेकिन अंतर केवल कुछ मिलीसेकंड का होता है, इसलिए अपनी ज़रूरत के हिसाब से चुनें।

\n\n
\n\n

4. टाइमज़ोन और कैशिंग: सही तरीका

\n\n

अगर आपका एप्लिकेशन अलग-अलग टाइमज़ोन में काम करता है, तो DateTime क्लास का उपयोग करें और टाइमज़ोन स्पष्ट रूप से सेट करें। कैशिंग के लिए, एक बार समय प्राप्त करें और पूरे स्क्रिप्ट में उसी का उपयोग करें। इससे परफॉरमेंस बढ़ेगी और समय एक समान रहेगा।

\n\n
\n\n

निष्कर्ष

\n\n

PHP में NOW() को इम्यूलेट करना न केवल परफॉरमेंस के लिए अच्छा है, बल्कि यह आपके कोड को ज़्यादा पोर्टेबल और विश्वसनीय बनाता है। date(), DateTime, या DateTimeImmutable में से अपनी ज़रूरत के हिसाब से चुनें। टाइमज़ोन और कैशिंग का ध्यान रखें, और आपका PHP कोड तेज़ और सटीक रहेगा।

ब्लॉग

पुस्तक अनुशंसाएँ