2011-04-09 6 views
5

सैद्धांतिक प्रश्न।php getdate() बनाम दिनांक()

स्थिति की कल्पना करें। मुझे आज की तारीख और समय मिलना है (अब नहीं, लेकिन आज - दिन की शुरुआत)। मैं या तो इस कोड के साथ यह कर सकते हैं:

$now = time(); 
$today = date('Y-m-d H:i:s', mktime(0, 0, 0, date("m", $now), date("d", $now), date("Y", $now))); 

या इस:

$now = getdate(); 
$today = date('Y-m-d H:i:s', mktime(0, 0, 0, $now['mon'], $now['mday'], $now['year'])); 

सबसे उदाहरण मैंने देखा है में, पहले जिस तरह से किया जाता है। सवाल सरल है: क्यों? पहला, महीने, दिन और वर्ष प्राप्त करने के लिए 3 फ़ंक्शन कॉल का उपयोग करता है।

+0

शायद आदत: पीएचपी इंटरैक्टिव शीघ्र से एक डेमो? या सिर्फ भाग्य - समान कोडित उदाहरण ढूंढना। प्रदर्शन के अनुसार दोनों के बीच कोई वास्तविक अंतर नहीं है। इसके लायक होने के लिए, मैं दूसरी विधि पसंद करता हूं। यह बेहतर पढ़ता है। – Adam

उत्तर

13

उन विकल्पों में से दोनों बहुत भयानक कर रहे हैं - अगर आप एक स्वरूपित स्ट्रिंग आधी रात में आज की तारीख पाने के लिए कोशिश कर रहे हैं, यह उतना ही आसान के रूप में बताया गया है:

date('Y-m-d') . ' 00:00:00'; 

, अगर आप थोड़ा होना चाहते हैं या फिर अधिक स्पष्ट,

date('Y-m-d H:i:s', strtotime('today midnight')); 

कि निराला mktime बात करने के लिए कोई ज़रूरत नहीं। जो भी कोड लिखा है उसे पता नहीं है कि वे क्या कर रहे हैं और/या एक कॉपी-पेस्ट/कार्गो-पंथ डेवलपर है। यदि आप वास्तव में "अधिकांश उदाहरणों" में देखते हैं, तो आप जिस भीड़ के साथ लटक रहे हैं वह गहराई से परेशान है और आपको शायद उनके साथ लटकना बंद कर देना चाहिए।

केवल दिलचस्प बात यह है कि mktime स्थानीय टाइमज़ोन के साथ काम करने का प्रयास करता है। यदि आपका काम टाइमज़ोन संवेदनशील है, और आप PHP 5.3 या बेहतर के साथ काम कर रहे हैं, तो DateTime और DateTimeZone के साथ काम करने पर विचार करें।

php > $utc = new DateTimeZone('UTC'); 
php > $pdt = new DateTimeZone('America/Los_Angeles'); 
php > $midnight_utc = new DateTime('today midnight', $utc); 
php > $midnight_utc->setTimeZone($pdt); 
php > echo $midnight_utc->format('Y-m-d H:i:s'); 
2011-04-08 17:00:00 

(फिलहाल, यह यूटीसी में 9 वीं है, जबकि यह पीडीटी में 8 वीं है।)