2010-04-30 4 views
5

मेरे पास एक ऐसी साइट है जहां उपयोगकर्ता कुछ तिथियां प्रदान करते हैं, लेकिन यदि वे 12 अप्रैल 2099 जैसे वर्ष में प्रवेश करते हैं, तो मुझे अतीत में तिथि मिलती है (1 9 6 9)। मैं इसे कैसे देखूं और डिफ़ॉल्ट अधिकतम सुरक्षित तिथि कैसे लागू करूं?दिनांक कैसे वैध दिनांक है, और वर्ष 2038 से अधिक नहीं है?

धन्यवाद।

उत्तर

5

DateTime कक्षाओं का प्रयास करें

$dt = new DateTime('2099-01-01'); 
$dt->setTime(23,59); 
$dt->add(new DateInterval('P10D')); 
echo $dt->format('Y-m-d H:i:s'); // 2099-01-11 23:59:00 

यकीन है कि क्या दिनांक समय आंतरिक रूप से उपयोग करता है पूर्णांकों के बजाय टाइमस्टैम्प स्टोर करने के लिए नहीं। लेकिन इंटीग्रर्स PHP_INT_MAX के लिए आपके प्लेटफ़ॉर्म के मान से सीमित हैं। आप 'U' (टाइमस्टैम्प के लिए) के साथ दिनांक स्वरूपण और date() करने के लिए इसे पारित करने के साथ इस परीक्षण कर सकते हैं:

echo date('Y-m-d H:i:s', $dt->format('U')); // 1962-12-06 17:30:44 

सूचना कैसे DateTime सही टाइमस्टैम्प रिटर्न लेकिन date इसके साथ काम नहीं कर सकते हैं:

var_dump(
    $dt->format('U'),       // 4071855540 
    date('U', $dt->format('U')),    // -223111756 
    PHP_INT_MAX,        // 2147483647 
    PHP_INT_MAX+1,        // -2147483648 
    date('Y-m-d H:i:s', PHP_INT_MAX),   // 2038-01-19 04:14:07 
    date('Y-m-d H:i:s', PHP_INT_MAX+1)  // 1901-12-13 21:45:52 
); 
+1

जो, अधिक शब्दों का उपयोग करने के लिए, "टाइमस्टैम्प के साथ काम न करें" का अर्थ है। :) –

+0

धन्यवाद गॉर्डन, मैं इस डेटाटाइम कक्षा के आसपास अपना सिर लेने की कोशिश कर रहा हूं। – user187580

+0

@ user187580 यदि आप कक्षाओं के साथ असहज महसूस करते हैं, तो आप प्रक्रियात्मक समकक्षों का भी उपयोग कर सकते हैं। उदाहरण के लिए 'date_create',' date_format', आदि – Gordon

0

आप mktime फ़ंक्शन का उपयोग कर सकते हैं। यदि यह Fri, 13 Dec 1901 20:45:54 GMT से Tue, 19 Jan 2038 03:14:07 GMT की तारीख के साथ प्रदान किया गया है तो यह युग से # सेकंड सेकंड देता है और यह false देता है।

var_dump(mktime(0, 0, 0, 1, 19, 2038)); // int(2147472000) 
var_dump(mktime(0, 0, 0, 1, 20, 2038)); // bool(false) 
संबंधित मुद्दे