संक्षिप्त जवाब
$now = date_create()->format('Y-m-d H:i:s');
लंबे उत्तर के लिए नीचे पढ़ें।
PHP में MySQL Now () फ़ंक्शन की नकल
यहाँ PHP में उन तरीकों की एक सूची है जो MySQL NOW()
फ़ंक्शन की नकल करते हैं।
// relative date
$now = date_create('now')->format('Y-m-d H:i:s'); // works in php 5.2 and higher
$now = date_create()->format('Y-m-d H:i:s'); // also works in php 5.2
$now = new DateTime('now')->format('Y-m-d H:i:s'); // syntax error!!!
$now = (new DateTime('now'))->format('Y-m-d H:i:s'); // works in php 5.4 and higher
$now = date('Y-m-d H:i:s'); // Slightly higher performance, but less usable for date/time manipulations
// From Unix timestamp
// Using date_create() with a Unix timestamp will give you a FALSE,
// and if you try to invoke format() on a FALSE then you'll get a:
// Fatal error: Call to a member function format() on boolean
// So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp = 1420070400; // 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);
मुझे लगता है कि date_create()->format('Y-m-d H:i:s')
यह सबसे अच्छा तरीका है क्योंकि यह दृष्टिकोण आपको समय / समय-क्षेत्र जोड़तोड़ को आसान से संभालने की अनुमति देता है date('Y-m-d H:i:s')
और यह php 5.2 के बाद से काम करता है।
MySQL Now () फ़ंक्शन
MySQL फ़ंक्शन NOW()
इस प्रारूप में दिनांक समय मान देता है 'YYYY-MM-DD HH:MM:SS'
:। यहां देखें: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now ।
एक दिलचस्प तथ्य यह है कि इस क्वेरी को चलाकर डेटाइम प्रारूप प्राप्त करना संभव है: SHOW VARIABLES LIKE 'd%e_format'
परिणाम कुछ इस तरह हो सकता है:
Variable_name Value
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
यहाँ चर केवल पढ़ने के लिए चर हैं। इसलिए आप इसे बदल नहीं सकते।
मुझे लगता है कि MySQL NOW()
फ़ंक्शन को datetime_format
वैरिएबल से स्वरूपित किया जाता है।
Date_create के लाभ () -> प्रारूप () तारीख () सारांश के बजाय
date_create('now')->format('Y-m-d H:i:s')
ओवर के अनुकूल तथ्य date('Y-m-d H:i:s')
हैं:
- आसान समय हेरफेर को संभालने के लिए
- टाइमज़ोन को संभालने में आसान
- OOP
Date_create () -> प्रारूप () के बजाय दिनांक () के नुकसान
फ़ंक्शन date()
की तुलना में थोड़ा बेहतर प्रदर्शन है date_create()->format()
। नीचे बेंचमार्क टेस्ट देखें।
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
$a = date_create('now')->format('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeA = $end - $start;
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
$b = date('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeB = $end - $start;
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 31
Case B, elapsed time in seconds: 14
ऊपरी मामला दिखाता है कि date()
तेज है। हालांकि, यदि हम परीक्षण परिदृश्य को थोड़ा बदलते हैं, तो परिणाम अलग होगा। निचे देखो:
$start = time();
$dt = date_create('now');
for ($i = 0; $i <= 5000000; $i++) {
$a = $dt->format('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeA = $end - $start;
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
$b = date('Y-m-d H:i:s');
}
$end = time();
$elapsedTimeB = $end - $start;
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 14
Case B, elapsed time in seconds: 15
DateTime विधि: format()
की तुलना में यहाँ तेज है date()
।
Date_create () -> प्रारूप () के बजाय दिनांक () का लाभ विस्तृत है
विस्तृत विवरण के लिए आगे पढ़ें।
आसान समय हेरफेर को संभालने के लिए
date_create()
एक रिश्तेदार तिथि / समय प्रारूप को स्वीकार करता है (जैसे now
, yesterday
या +1 day
) इस लिंक को देखें , उदाहरण:
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
date()
इस तरह एक रिश्तेदार तिथि / समय प्रारूप को स्वीकार करता है:
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
$tomorrow = date('Y-m-d H:i:s', (time() + 86400)); // 86400 seconds = 1 day
टाइमज़ोन को संभालने में आसान
जब टाइमज़ोन मायने रखता है तो उपयोग date_create()->format()
बहुत अधिक मायने रखता है date()
क्योंकि date()
डिफ़ॉल्ट समय क्षेत्र का उपयोग करता है जो निर्देश में कॉन्फ़िगर किया php.ini
गया है date.timezone
। लिंक: http://php.net/manual/en/datetime.configuration.php#ini.date.zone ।
रन-टाइम के दौरान टाइमज़ोन को बदलना संभव है। उदाहरण:
date_default_timezone_set('Asia/Tokyo');
।
इसका नकारात्मक पक्ष यह है कि यह सभी दिनांक / समय के कार्यों को प्रभावित करेगा। यदि आप date_create()->format()
संयोजन में उपयोग कर रहे हैं तो यह समस्या मौजूद नहीं हैtimezone_open()
।
PHP प्रमुख टाइमज़ोन का समर्थन करती है। मजेदार बात यह है कि यह आर्कटिक सर्कल और अंटार्कटिका का भी समर्थन करता है। क्या आपने कभी सुना है Longyearbyen
? यदि नहीं, तो चिंता न करें, न ही मैंने तब तक किया जब तक मैंने आधिकारिक पीएचपी दस्तावेज नहीं पढ़ा।
$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');
सभी समर्थित टाइमज़ोन की सूची देखें:
http://php.net/manual/en/timezones.php ।
OOP
OOP राज्य-पूर्ण वस्तुओं का उपयोग करता है। तो मैं इस तरह से सोचना पसंद करता हूं:
// Create a DateTime Object.
// Use the DateTime that applies for tomorrow.
// Give me the datetime in format 'Y-m-d H:i:s'
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
फिर इस तरह से सोचने के लिए:
// Give me a date time string in format 'Y-m-d H:i:s',
// use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
इसलिए मैं कहूंगा कि date_create()->format()
दृष्टिकोण मेरे लिए अधिक पठनीय है date()
।
date_create () VS नया दिनांक समय ()
date_create()
ओवर के अनुकूल तथ्य new DateTime()
हैं:
नेमस्पेस
यदि आप एक नामस्थान में काम करते हैं और नए कीवर्ड के साथ डेटटाइम ऑब्जेक्ट को इनिशियलाइज़ करना चाहते हैं, तो आपको इसे इस तरह करना होगा:
namespace my_namespace;
// The backslash must be used if you are in a namespace.
// Forgetting about the backslash results in a fatal error.
$dt = new \DateTime();
इसमें कुछ भी गलत नहीं है, लेकिन ऊपर का नकारात्मक पक्ष यह है कि लोग बैकलैश के बारे में छिटपुट रूप से भूल जाते हैं। date_create()
कंस्ट्रक्टर फ़ंक्शन का उपयोग करके आपको नामस्थान के बारे में चिंता करने की आवश्यकता नहीं है।
$dt = date_create(); // in or not in a namespace it works in both situations
Date_create का उदाहरण () -> प्रारूप ()
मुझे अपनी परियोजनाओं के लिए इस दृष्टिकोण का उपयोग करना है अगर मुझे एक सरणी भरना है। ऐशे ही:
$array = array(
'name' => 'John',
'date_time' => date_create('now')->format('Y-m-d H:i:s'), // uses the default timezone
'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Y-m-d H:i:s'),
);