2012-03-02 8 views
5

मैंने देखा है कि strtotime() एक अजीब तरह से यूनिक्स टाइमस्टैम्प संभालती है, और किसी को भी जानता है ऐसा क्यों है मैं उत्सुक था:स्ट्रिंगटाइम() के लिए इसे समझने के लिए '@' द्वारा यूनिक्स टाइमस्टैम्प को उपसर्ग करने की आवश्यकता क्यों है?

var_export(strtotime('1330725042')); // false 
var_export(strtotime('@1330725042')); // 1330725042 

क्यों strtotime() वापसी false जब एक यूनिक्स टाइमस्टैम्प दिया (जब तक कहा टाइमस्टैम्प @ लगाया जाता है)?

यह एक लाइब्रेरी विधि के आंतरिक से है जिसे मैंने बनाया है जिसका उद्देश्य एक अज्ञात प्रारूप प्रारूप को "टाइममेम्प" में "हल" करना है। एक नंगे strtotime() का उपयोग इस मामले में सहायक नहीं है क्योंकि आने वाले मूल्य वास्तव में टाइमस्टैम्प होने पर गलत परिणाम देता है।

मैंने टाइमस्टैम्प-जैसे मान के लिए एक स्पष्ट जांच करने के लिए लाइब्रेरी विधि को फिर से काम किया है और इसे अनमोडिफाइड वापस कर दिया है, इसलिए ... क्या हम कहेंगे, अब इस प्रश्न के लिए कोई व्यावहारिक अनुप्रयोग नहीं है; मैं सिर्फ उत्सुक हूँ।

+4

क्योंकि प्रलेखन ऐसा कहता है :) http://www.php.net/manual/en/datetime.formats.compound.php मुझे नहीं लगता कि एक पूर्णांक वैध दिनांक/समय प्रारूप – Tchoupi

+0

+1 है वह मैथ्यू लिंक। मुझे लगा कि उस पर दस्तावेज़ थे * कहीं *। – Josh

+0

धन्यवाद। मुझे वास्तव में कोई जानकारी नहीं थी कि यूनिक्स टाइमस्टैम्प वैध PHP डेटटाइम प्रारूप हो सकता है। – Tchoupi

उत्तर

5

स्ट्रिंग जो strtotime() प्राप्त करता है एक विशिष्ट प्रारूप में होना चाहिए। http://www.php.net/manual/en/datetime.formats.php

यदि strtotime() इनपुट प्रारूप को नहीं पहचानता है, तो यह FALSE देता है। चूंकि यूनिक्स समय केवल संख्याओं का अनुक्रम है, यह ठीक से उन्हें तब तक पार्स नहीं कर सकता जबतक कि आप स्पष्ट रूप से निर्दिष्ट नहीं करते कि आप किस प्रारूप का उपयोग कर रहे हैं। शुरुआत में @ डालने से फ़ंक्शन निर्देश देता है कि यह अनुक्रम यूनिक्स समय प्रारूप में है। http://php.net/manual/en/function.strtotime.php

+2

लिंक के लिए धन्यवाद। मुझे यह मिला: 'यूनिक्स टाइमस्टैम्प \t "@" "-"? [0-9] + \t "@ 1215282385" http://php.net/datetime.formats.compound –

1

क्योंकि स्ट्रेटोटाइम का अर्थ है समय और आपकी "1330725042" समय स्ट्रिंग नहीं है लेकिन उद्धरणों में लिपटे एक यूनिक्स टाइमस्टैम्प है।

स्ट्रेटोटाइम() का अर्थ "2-मार्च -2012" जैसे मानों के लिए किया जाना है।

यदि आपके पास पहले से ही 1330725042 यूनिक्स टाइमस्टैम्प मान के रूप में है, तो आपको strtotime() का उपयोग करने की आवश्यकता क्यों है?

+0

डब्लूआरटी टाइम्सस्टैम्प पर 'स्ट्रेटोटाइम() 'क्यों कॉल करें, इस प्रश्न के पीछे प्रेरणा ऐसी परिस्थितियां हैं जहां कोड नहीं जानता है मान पहले से ही एक टाइमस्टैम्प है। मैंने अपने प्रश्न को अधिक जानकारी के साथ अपडेट किया है। –

+0

आप किसी की लाइब्रेरी का उपयोग कर रहे हैं जो आपके द्वारा आपूर्ति की जाने वाली चीज़ों पर स्ट्रेटोटाइम कहता है, और आपके पास टाइमस्टैम्प है। – derekdreery

1

स्ट्रेटोटाइम() टाइमस्टैम्प आउटपुट करता है, और इसका पैरामीटर दिनांक के पाठ प्रस्तुतिकरण से होना चाहिए, इसलिए आप इसे गलत उपयोग कर रहे हैं।

2

शायद से एक यूनिक्स टाइमस्टैम्प को परिवर्तित करता है, इसलिए यह एक पैरामीटर के रूप में अपेक्षा नहीं कर रहा है।

पढ़ें more

0

strtotime यूनिक्स टाइमस्टैम्प लेकिन सादे अंग्रेजी तिथि या (जैसे "+1 दिन" या "1 महीने")

@ से पहले मूल्य निश्चित रूप से गति प्रदान "होगा रिश्तेदार समय को नहीं पहचानता है त्रुटि को अनदेखा करें "कॉल के भीतर php का मोड, (दिलचस्प साइड इफेक्ट) इस प्रकार अवांछनीय मान को var डंप पर वापस जाने दिया जाता है।

+0

'" @ 1215282385 "वास्तव में एक वैध प्रारूप है टिप्पणियों में दिए गए लिंक पर एक नज़र डालें। – Josh

+0

दुर्भाग्यवश, मुझे यह -1 करना है, क्योंकि इस मामले में त्रुटि को दबाने के साथ '@ 'की उपस्थिति के साथ कुछ भी नहीं है; यह सिर्फ [PHP के दस्तावेज़ के लिए प्रारूपित प्रारूप का हिस्सा है टाइमस्टैम्प] (http://php.net/datetime.formats.compound) –

0

बाकी सब समारोह के उपयोग में सही है और यह एक स्ट्रिंग और नहीं एक टाइमस्टैम्प स्ट्रिंग स्वीकार करता है कि:

अधिक जानकारी के लिए यहाँ प्रलेखन है। हालांकि, अगर आपको @ साइन का उपयोग करके परिणाम मिल रहे हैं तो संभव है कि यह निम्न पाठ को इंगित करने वाला ऑपरेटर एक टाइमस्टैम्प है या यह कि PHP के मानक उपयोग के अनुसार फ़ंक्शन त्रुटियों को बाईपास कर रहा है।

किसी भी तरह से, आप एक टाइमस्टैम्प क्यों strtotime करना चाहते हैं?

+0

डब्लूआरटी क्यों टाइमस्टैम्प पर 'strtotime() 'को कॉल करें, इस प्रश्न के पीछे प्रेरणा ऐसी परिस्थितियां हैं जहां कोड नहीं जानता कि मूल्य पहले से ही एक टाइमस्टैम्प है। मैंने अधिक जानकारी के साथ अपना प्रश्न अपडेट कर लिया है। –

+0

दुर्भाग्यवश, मुझे यह -1 करना है, क्योंकि इस मामले में त्रुटि को दबाने के साथ '@ 'की उपस्थिति के साथ कुछ भी नहीं है; यह यूनिक्स टाइमस्टैम्प के लिए [PHP के दस्तावेज प्रारूप का हिस्सा है] (http://php.net/datetime.formats.compound)। –

0

strtotime() एक अंग्रेजी दिनांक प्रारूप को यूनिक्स टाइमस्टैंप में परिवर्तित करने के लिए है, इसलिए दिनांक प्रारूप के बजाय एक यूनिक्स टाइमस्टैम्प प्रदान करना इस फ़ंक्शन का वैध उपयोग नहीं होगा। स्वीकृत दिनांक और समय प्रारूप http://php.net/manual/en/datetime.formats.php

0

उत्तर का उत्तर यह है कि एक अग्रणी @ एक यूनिक्स टाइमस्टैम्प दिनांक प्रारूप का प्रतीक है, जबकि स्वयं पर एक पूर्णांक एक अवैध दिनांक प्रारूप है। देखें: http://php.net/manual/en/datetime.formats.compound.php

क्यों strtotime('@1 a') -3599 का गैर-ग़लत परिणाम देता है, हालांकि, मुझे कोई जानकारी नहीं है। lol