2010-10-17 16 views
17

यह एक मूर्ख सवाल है, लेकिन time() का अधिकतम INT मान क्या होगा और इसकी भविष्य की तारीख, उदा।अधिकतम समय() | PHP

1st जनवरी 2999

चाहेंगे समय() कभी इस मूल्य के लिए मिलता है? एक बड़े time() मूल्य के लिए जा रहे हैं इस वापसी होगी:

गुरु 1st जनवरी 1970 1:00 पूर्वाह्न

एक सामान्य पूर्णांक तारीख

1287320788 - आउटपुट आज की तारीख: सूर्य 17 वीं अक्टू 2010 2 : 06 पीएम

लेकिन मैं सबसे बड़ी int तिथि और अंतिम तिथि के लिए उत्सुक हूं।

+2

MySQL के लिए, यह भी http://stackoverflow.com/questions/2012589/ देखना php-mysql-year-2038-bug-what-is-it-how-to-resol-it – Wrikken

+0

उस लिंक में PHP पक्ष –

+0

पर अच्छी पृष्ठभूमि जानकारी भी है जो हाल ही में PHP के 'time()' में तय की गई है? अब दिनांक के लिए सबसे बड़ा मूल्य 9223372036854772207' ('04.12.292277026596 15: 30: 07') (64 बिट इंटीजर अधिकतम मूल्य के बहुत करीब) –

उत्तर

33

अंतिम 32-बिट इंटीजर टाइमस्टैम्प 1 9 जनवरी, 2038 को पहुंचा जाएगा। इसे Year 2038 problem के रूप में जाना जाता है।

+0

इस पेक्का के लिए धन्यवाद। एक बार जब हम लगभग पहुंच जाएंगे तो क्या यह कभी हल हो जाएगा? – MacMac

+0

@YouBook यदि PHP तब भी मौजूद है, तो शायद। अंतर्निहित सिस्टम को बड़े आईएनटी में स्विच करके इसे ठीक करना आसान होगा - PHP की कमजोर टाइपिंग के कारण कोई समस्या नहीं होगी। वैकल्पिक रूप से, गॉर्डन –

+0

द्वारा सुझाए गए 'डेटटाइम' का उपयोग करें मूल रूप से समस्या परिभाषा के अनुसार स्वयं को हल करेगी क्योंकि 2038 32-बिट सिस्टम में अधिकतम int है और अधिकांश कंप्यूटर पहले से ही 64-बिट हैं जिसका अर्थ है पूर्णांक के संदर्भ में अधिक रेंज ... – Moby04

29

पीएचपी भंडार उच्चतम पूर्णांक संख्या यह PHP_INT_MAX निरंतर में प्रतिनिधित्व कर सकते हैं:

date('Y-m-d H:i:s', PHP_INT_MAX); // 2038-01-19 04:14:07 

आप, कि परे तिथियों के साथ काम करते हैं DateTime API उदा उपयोग करने पर विचार करना चाहते हैं

$dt = new DateTime('1st January 2999'); 
$dt->add(DateInterval::createFromDateString('+1 day')); 
echo $dt->format('Y-m-d H:i:s'); // 2999-01-02 00:00:00 
echo $dt->format('U');   // 32472226800 
+1

हां, 'डेटटाइम' और - mySQL पक्ष पर - 'DATETIME' फ़ील्ड प्रकार पूरी तरह से समस्या को हल करता है। –

4

याद रखें, वाई -2038 समस्या 64-बिट सिस्टम पर लागू नहीं होती है।

+4

एमएम, क्या आप निश्चित हैं? क्या PHP की पूर्णांक की आंतरिक हैंडलिंग स्वचालित रूप से 64-बिट हो जाएगी? –

+0

मुझे बिल्कुल यकीन नहीं है, लेकिन ऐसा लगता है कि मेरे बॉक्स पर रोल हो रहा है ... :-) – oglgo

+4

64-बिट अगले ~ 300 अरब वर्षों के लिए ठीक रहेगा। – Jonah

0

दिनांक समय 64 बिट सर्वर पर 32 बिट का उपयोग करने लगता है। तो आप परेशानी में आते हैं।

new DateTime("99999/12/31 00:00:00"); 

वजह से, तिथि दिनांक समय के लिए अधिकतम लंबाई overflows, तारीख अधिकतम possibel मूल्य का उपयोग करें और इस तरह से दिनांक समय-वस्तु (var_dump के साथ निरीक्षण किया) देता है:

मैं इसे इस तरह से हल कर दिया है:

object(DateTime)#9 (3) { ["date"]=> string(19) "2031-09-12 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } } 

मुझे यकीन नहीं है कि यह PHP के संस्करणों के साथ अलग है या नहीं। मैंने इसे संस्करण 5.4 के साथ परीक्षण किया है।

1

सबसे छोटा रास्ता मैं जानता हूँ कि कल की तारीख पाने के लिए है:

तिथि ("YNJ", strtotime ("+ 1 दिन"))

64 बिट-सिस्टम पर

date("Y-n-j", PHP_INT_MAX) संभावित खतरनाक देता है मूल्य: 292277026596-12-4

0

64-बिट प्लेटफ़ॉर्म पर PHP_INT_MAX 32-बिट प्लेटफ़ॉर्म के लिए अधिकतम INT मान को प्रतिबिंबित नहीं करता है।यह इस प्रकार से प्राप्त करने के लिए है:

$max32bitInt = PHP_INT_SIZE == 4 ? PHP_INT_MAX : PHP_INT_MAX>>32; 

आप हमेशा 64-बिट मंच का उपयोग कर रहे हैं, तो बस का उपयोग करें:

PHP_INT_MAX>>32 
संबंधित मुद्दे