2013-02-14 39 views
21

PHP 5.4.6 और MySQL 5.5.29 का उपयोग कर रहा हूं और मुझे यूनिक्स टाइमस्टैम्प को MYSQL DATETIME और इसके विपरीत में परिवर्तित करके परेशानी हो रही है। एक ही स्थानीय मशीन पर MySQL और PHP wun।PHP-MYSQL: यूनिक्स टाइमस्टैम्प को डेटटाइम में कनवर्ट करना और इसके विपरीत

मैं एक साधारण mysql तालिका

CREATE TABLE Entry(
id SERIAL PRIMARY KEY, 
created DATETIME NOT NULL); 

डेटा मैं php पीडीओ और mysql अब का उपयोग सम्मिलित करने के लिए है()। यह ठीक काम करता है, सही डेटाटाइम डेटाबेस में संग्रहीत है।

मेरी योजना क्लाइंट साइड पर यूनिक्स टाइमस्टैम्प के साथ काम करना है (सर्वर पर PHP & mysql)।

तो मैं अपने क्लाइंट को यूनिक्स टाइमस्टैम्प वितरित करना चाहता हूं। इसलिए मैं सीधे क्वेरी में इसे परिवर्तित करने के लिए MySQL UNIX_TIMESTAMP() फ़ंक्शन का उपयोग करता हूं।

तो कोई नमूना क्वेरी इस तरह दिखता है:

SELECT created, UNIX_TIMESTAMP(created) AS TS FROM Entry 

परिणाम: बनाई = 2013-02-14 20:47:35 टीएस = 1360871255

तो अब मैं क्या करना चाहते हैं दूसरी तरफ, मैं यूनिक्स टाइमस्टैम्प पास करता हूं, और इसे अपने डेटाबेस में प्रविष्टियों के साथ तुलना करना चाहता हूं। दुर्भाग्य से मैं काम करता है कि एक PHP स्क्रिप्ट लिखने में सक्षम नहीं है। मैं पता नहीं क्यों, लेकिन जब मैं PHP के लिए एक ही टाइमस्टैम्प (1360871255) से गुजर रहा हूँ मैं इस विधि के साथ 2013-02-14 20:47:35 नहीं मिलता:

public static function toDateTime($unixTimestamp){ 
    return date("Y-m-d H:m:s", $unixTimestamp); 
} 

जब मैं toDateTime फोन (1360871255) 2013-02-14 20:02:35 वापस आएगा जो मूल दिनांक समय नहीं है।

मुझे पता है, मुझे 1360871255 को वाई-एम-डी एच में प्रारूपित करने की आवश्यकता नहीं है: एम: एस इसे MYSQL में उपयोग करने के लिए है, लेकिन 1360871255 ऐसा लगता है कि मुझे अपेक्षित समय नहीं है (और MYSQL UNIX_TIMESTAMP वापस आ गया है)।

मुझे क्या करना चाहते हैं एक सरल प्रश्न है कि मुझे प्रविष्टियां कि एक निश्चित टाइमस्टैम्प से अधिक पुराने हैं पता चलता है, कुछ इस तरह सरल है:

SELECT * FROM Entry WHERE created < 1360871255 

लेकिन जैसा कि मैंने पहले उल्लेख किया है, क्वेरी परिणाम की उम्मीद नहीं है , क्योंकि 1360871255 सही समय नहीं लगता है।

मैं php में mysql कनेक्शन के लिए कोई विशेष टाइमज़ोन निर्दिष्ट नहीं करता हूं।

कोई सुझाव?

उत्तर

36

आपका date format गलत है ... i मिनट के लिए है, m (महीने) नहीं है।

return date("Y-m-d H:i:s", $unixTimestamp); 

कुछ ओर नोट:

  • फिर से सौंप करने की कोई जरूरत, नहीं है अर्थात $unixTimestamp = $unixTimestamp;
  • आप PHP> 5.3 का उपयोग कर रहे के बाद से। आपको नए DateTime ऑब्जेक्ट में रुचि हो सकती है।दोनों की तारीख और समय भागों में

    return date("Y-m-d H:m:s", $unixTimestamp); 
    

    आप यह निर्दिष्ट महीने (एम):

+1

अरे, आपका अधिकार ... omg ... im so stupid – sockeqwe

+3

@sockeqwe - आप बेवकूफ नहीं हैं। आपने इसे अभी देखा है। हो जाता है। – Greeso

3

समस्या समारोह आप ने लिखा में निहित है। आपको एमi के साथ, PHP में दिनांक() का उपयोग करते समय घंटों के लिए सही ध्वज को प्रतिस्थापित करना चाहिए।

return date("Y-m-d H:i:s", $unixTimestamp); 

आपकी ज़रूरतों के आधार पर आपको PHP फ़ंक्शन स्ट्रेटोटाइम() पर्याप्त उपयोगी हो सकता है।

0
function format_date($str) { 
    $month = array(" ", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"); 
    $y = explode(' ', $str); 
    $x = explode('-', $y[0]); 
    $date = "";  
    $m = (int)$x[1]; 
    $m = $month[$m]; 
    $st = array(1, 21, 31); 
    $nd = array(2, 22); 
    $rd = array(3, 23); 
    if(in_array($x[2], $st)) { 
      $date = $x[2].'st'; 
    } 
    else if(in_array($x[2], $nd)) { 
      $date .= $x[2].'nd'; 
    } 
    else if(in_array($x[2], $rd)) { 
      $date .= $x[2].'rd'; 
    } 
    else { 
      $date .= $x[2].'th'; 
    } 
    $date .= ' ' . $m . ', ' . $x[0]; 

    return $date; 
} 
0

दोनों में से कुछ भी नहीं। आपको टाइमस्टैम्प को INT या BIGINT के रूप में सहेजना चाहिए क्योंकि यदि आप TIMESTAMP MySQL के प्रारूप का उपयोग करते हैं तो आप इसे कभी भी int पर कभी नहीं प्राप्त करेंगे। आप केवल 1970-01-01 01:00:00 जैसे कुछ प्राप्त कर सकते हैं।

1

क्यों mysql में FROM_UNIXTIME फ़ंक्शन का उपयोग न करें?

+0

एसक्यूएल भाषा बेकार है और इसलिए MySQL एक्सटेंशन का उपयोग करता है, खासकर हाल के संस्करणों से। और मेटा भाषा की तुलना में वास्तविक प्रोग्रामिंग भाषा के साथ काम करना बहुत आसान और अच्छा है जो शेष एप्लिकेशन के साथ फिट नहीं होता है। – Deji