PHP के साथ MySQL डेटाइम से दूसरे प्रारूप में कनवर्ट करें


447

datetimeMySQL में मेरा एक कॉलम है।

मैं इसे PHP के उपयोग से मिमी / dd / yy H: M (AM / PM) के रूप में कैसे प्रदर्शित कर सकता हूं ?


4
हमें यह जानने की जरूरत है कि एसक्यूएल के भीतर तारीख कैसे जमा होती है। क्या यह टाइमस्टैम्प है या डाइमटाइम या यूनिक्सटाइम?
लाफुर वेज

वे एक सामान्य तिथि की तरह यूनिक्स समय में संग्रहीत नहीं होते हैं, PHP वह है जो इसे सेकंड और सामान के रूप में व्यवहार करता है। मैं आपको PHP OOPडेटाटाइम फ़ंक्शन का उपयोग करने की सलाह दूंगा, वे उपयोग करने में बहुत आसान हैं।
गुच्चो Ca

2
क्या मैं आपकी तिथि प्रारूप की सिफारिश और विकल्प कर सकता हूं? mm/dd/yyबहुत अमेरिकी है, और दुनिया के अन्य हिस्सों में रहने वाले हम में से दूसरे को यह अनुमान लगाने में थोड़ी चिड़चिड़ाहट होती है कि इसका मतलब क्या है 11-12-13। अधिक सार्वभौमिक मानक है yyyy-mm-dd, और आईएसओ 8601 मानक का हिस्सा है। असफल होने पर, आपको महीने के नाम का उपयोग करना चाहिए , संख्या का नहीं।
मन्नजो

जवाबों:


515

यदि आप MySQL प्रारूप में किसी तिथि को सामान्य करने का तरीका खोज रहे हैं, तो निम्न का उपयोग करें

$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

रेखा $phpdate = strtotime( $mysqldate )एक स्ट्रिंग को स्वीकार करती है और उस स्ट्रिंग को एक यूनिक्स टाइमस्टैम्प में बदलने के लिए उत्तराधिकार की एक श्रृंखला करती है।

रेखा $mysqldate = date( 'Y-m-d H:i:s', $phpdate )उस टाइमस्टैम्प और PHP के dateफ़ंक्शन का उपयोग करके उस टाइमस्टैम्प को MySQL के मानक तिथि प्रारूप में वापस लाती है।

( संपादक ध्यान दें : यह उत्तर भ्रमित करने वाले शब्दों के साथ एक मूल प्रश्न के कारण यहाँ है, और सामान्य Google उपयोगिता इस उत्तर को प्रदान करती है, भले ही यह सीधे उस प्रश्न का उत्तर न दे जो अब मौजूद है)


19
यह उत्तर विषय को भ्रमित कर रहा है
एलेक्स के

5
@ 0xBAADF00D: कृपया प्रश्न को फिर से पढ़ें ... किसी ने MySQL मानक प्रारूप के बारे में नहीं पूछा।
user7116

3
बेशक, लेकिन, जब मानक मौजूद होता है, तो मानक का पालन करना अच्छा हो सकता है (यह बाद में सिरदर्द से बचने के लिए जब आपके कोड पर एक और देव काम करता है) xD
0xBAADF00D

4
प्रश्न प्रारूप mm / dd / yy H: M (AM / PM) में आउटपुट करने के लिए कहता है, न कि "Ymd H: i: s"।
रिक्की

6
does not workकिसके लिए? स्वीकृत जवाब अगर आप परिवर्तित करना चाहते हैं काम करेंगे से में MySQL dd / mm / yy एच: एम (AM / PM) के रूप में ओ पी का अनुरोध किया। सिर्फ इसलिए कि आप विपरीत करना चाहते हैं, स्वीकार किए गए उत्तर को गलत नहीं बनाते हैं।
टॉक्सालॉट

311

अनुरोध किए गए प्रारूप में MySQL से प्राप्त तिथि को परिवर्तित करने के लिए ( mm/dd/yy H:M (AM/PM)):

// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM

प्रारूप को समायोजित करने के लिए PHP दिनांक स्वरूपण विकल्पों का संदर्भ लें ।


यह $rowऑब्जेक्ट कहां से माना जाता है?
माइक

25
मैं गलत हो सकता है, लेकिन मुझे लगता है कि आप में से कुछ इस बिंदु को याद कर रहे हैं। वह चाहता है कि आउटपुट "m / d / yg: i A" प्रारूप में हो, एक DATETIME फ़ील्ड से मूल दिनांक खींच रहा है। तो उसका कोड काम करता है। @ माइक $ पंक्ति-> क्रिएट सिर्फ टिम का डेटाइम कॉलम है।
मेरे विकास

4
@AsTeR उत्तर केवल भ्रमित करने वाला है यदि आप प्रश्न को गलत बताते हैं। ओपी ही सवाल का जवाब दिए और एक तारीख ले जाना चाहता है से अनुरोध किया प्रारूप करने के लिए MySQL और उत्पादन: dd / mm / yy एच: एम (AM / PM)
टॉक्सालॉट

@TimBoland मैं जवाब सुधार किया जा सकता लगता है कि अगर से साथ ही अनुरोध किया प्रारूप के रूप में बल दिया गया था dd / mm / yy एच: एम (AM / PM) । और यह तारीख समारोह के लिंक से लाभान्वित हो सकता है। मैंने एक संपादन का सुझाव देने की कोशिश की , लेकिन इसे अस्वीकार कर दिया गया।
टॉक्सालॉट

1
मजेदार तथ्य: यह उत्तर लगभग एक ही नीचे के बराबर है (जिसका वस्तुतः कोई डाउनवोट नहीं है), लेकिन इसे मिला> 40 डाउनवोट्स क्योंकि यह ओपी के सवाल का जवाब देता है, जो कि इस पृष्ठ पर आने वाले लोगों से भिन्न होता है।
क्लेमेंट

110

यदि आप PHP 5 का उपयोग कर रहे हैं, तो आप भी कोशिश कर सकते हैं

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");

जैसा कि टिप्पणियों में ऊपर कहा गया है, मानक प्रारूप है("Y-m-d H:i:s")
यानिकेव

45
$valid_date = date( 'm/d/y g:i A', strtotime($date));

संदर्भ: http://php.net/manual/en/function.date.php


मुझे लगता है कि लोग नीचा दिखाते हैं क्योंकि वे ओपी प्रश्न के बारे में भ्रमित होते हैं। अधिकांश इस सवाल को पढ़ते हैं कि यह वास्तव में क्या है। दूसरी संभावना यह है कि यह स्वीकृत उत्तर के समान है जो 5+ साल पहले पोस्ट किया गया था।
टॉक्सालॉट

1
आपके द्वारा संदर्भित लिंक आपके द्वारा उपयोग किए जा रहे फ़ंक्शन को इंगित नहीं करता है, और न ही यह प्रारूप की व्याख्या करता है। मुझे लगता है कि php.net/function.date.php बेहतर होगा।
2

@toxalot स्वीकृत उत्तर गलत है। यह मेरे उत्तर के बाद और मेरे लिंक के बारे में संपादित करता है, मैं आपके लिंक को बदल देता हूं। धन्यवाद
टोनी स्टार्क

1
इस पूरे प्रश्नोत्तर का एक पुराना इतिहास है। स्वीकृत उत्तर 29 अप्रैल, 2013 और 24 मई, 2013 के बीच गलत था । यह सही था जब आपने पहली बार अपना उत्तर पोस्ट किया था। आपका उत्तर 29 मई 2013 तक गलत था , जिसके बाद यह स्वीकृत उत्तर के समान हो गया।
टॉक्सालॉट

23

अंत में PHP 5.3 और उससे ऊपर के लिए सही समाधान: (टिप्पणियों में उल्लिखित उदाहरण के लिए वैकल्पिक समयक्षेत्र जोड़ा गया)

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date, new \DateTimeZone('UTC'));
$date->setTimezone(new \DateTimeZone('Europe/Berlin')); // optional
echo $date->format('m/d/y h:i a');

इसकी त्रुटि .. क्लास 'ऐप \ कंट्रोलर' डेटटाइम 'नहीं मिली .. फ़्यूज़िंग 6.4
अश्वगंधा

1
यदि आप किसी अन्य नाम स्थान पर काम कर रहे हैं, तो आपको इसके सामने एक बैकस्लैश के साथ कॉल करना होगा:\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
हसनप्राइस्टर

2
जब आप अपनी दिनांक ऑब्जेक्ट बनाते हैं तो समय-क्षेत्र निर्दिष्ट करना न भूलें! अन्यथा, आपकी स्वरूपित तिथि कई घंटे की हो सकती है। आपका datetimeकॉलम UTF8 होना चाहिए, इसलिए new DateTimeZone('UTC')PHP को सुनिश्चित करने के लिए 3 पैरामीटर के रूप में पास करें।
एरिक सस्टैंडैंड

यह सही उत्तर है जो ओपी के वांछित प्रारूप को आउटपुट करता है, बस टाइमज़ोन का ध्यान रखें
एकाउंटेंट एन

12

एक आसान तरीका यह होगा कि आप PHP के बजाय सीधे MySQL क्वेरी में तारीख को प्रारूपित करें। DATE_FORMAT के लिए MySQL मैनुअल प्रविष्टि देखें ।

यदि आप इसे PHP में करते हैं, तो आपको तिथि फ़ंक्शन की आवश्यकता है , लेकिन आपको पहले अपने डेटाबेस मूल्य को टाइमस्टैम्प में बदलना होगा।


11
-1 क्योंकि DB में प्रारूपण की तारीख अच्छी नहीं है। बहुभाषी वेब को अलग-अलग दिनांक स्वरूपों की आवश्यकता होती है और फिर आपको PHP में दिनांक (सामान्य में व्यावसायिक तर्क भाषा) प्रारूपित करना होगा। जब आपने dateफ़ंक्शन के बारे में लिखा था , तो आपको strottimeफ़ंक्शन के बारे में भी लिखना चाहिए "किसी के बजाय किसी की मदद करने के लिए" लेकिन आपको अपने डेटाबेस मान को टाइमस्टैम्प में बदलना होगा "।
बोरिस Borisuška

10

सबको भूल जाओ। महज प्रयोग करें:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))

9

DateTimeMySQL में स्टोर करने के लिए PHP में ऑब्जेक्ट को सही ढंग से फॉर्मेट करने के लिए, MySQL का उपयोग करने वाले मानकीकृत प्रारूप का उपयोग करें, जो कि आईएसओ 8601 है

PHP के पास इस प्रारूप को 5.1.1 संस्करण के बाद से एक स्थिर के रूप में संग्रहीत किया गया है, और मैं प्रत्येक बार स्ट्रिंग को मैन्युअल रूप से टाइप करने के बजाय इसका उपयोग करने की अत्यधिक सलाह देता हूं।

$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);

यह, और अन्य PHP डेटाइम स्थिरांक की एक सूची http://php.net/manual/en/class.datetime.php#datetime.constants.types पर उपलब्ध है


MySQL वास्तव में इस प्रारूप का उपयोग नहीं करता है, और यदि आप "+ xxxx" टाइम ज़ोन डिज़ाइनर को शामिल करते हैं तो MySQL एक चेतावनी उत्पन्न करता है। अद्यतन X सेट Y = '2014-03-31T15: 00: 00 + 0100' जहां Z; क्वेरी ठीक, 0 पंक्तियाँ प्रभावित, 1 चेतावनी (0.06 सेकंड) पंक्तियों का मिलान: 1 परिवर्तित: 0 चेतावनियाँ: 1
जॉर्ज लुंड

ओपी MySQL प्रारूप से एक तारीख लेना चाहता है और mm / dd / yy H: M (AM / PM) में परिवर्तित करता है
टॉक्सालॉट

8

यह SQL क्वेरी में फ़ील्ड को प्रारूपित करना चाहिए:

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename

आपको केवल SQL नहीं, बल्कि MySQL क्वेरी को निर्दिष्ट करना चाहिए , क्योंकि यह सभी डेटाबेस के साथ काम नहीं करेगा। जबकि ओपी ने PHP समाधान के लिए कहा, यह एक अच्छा विकल्प है जिसके बारे में ओपी को पता नहीं हो सकता है। हालांकि, यह अनुरोधित प्रारूप प्रदान नहीं करेगा। ओपी से अनुरोधित प्रारूप प्राप्त करने के लिए, आपको आवश्यकता होगी '%m/%d/%y %h:%i %p'
टॉक्सालॉट

7

दिनांक फ़ंक्शन का उपयोग करें :

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>

25
क्या दिनांक () फ़ंक्शन प्रश्न में निर्दिष्ट डेटाइम के बजाय पूर्णांक टाइमस्टैम्प की अपेक्षा नहीं करता है?
लॉफ्टेक्स

5

आपके MySQL डेटाइम कॉन्फ़िगरेशन पर निर्भर करता है। आमतौर पर: 2011-12-31 07:55:13 प्रारूप। यह बहुत ही सरल कार्य जादू करना चाहिए:

function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

या सवाल का मिलान करने के लिए थोड़ा और अग्रिम।

function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}

1
यह ओपी प्रश्न का उत्तर नहीं देता है। ओपी MySQL प्रारूप से एक तारीख लेना चाहता है और mm / dd / yy H: M (AM / PM) में परिवर्तित करता है । साथ ही यह केवल वर्तमान समय को प्रारूपित करेगा, न कि किसी विशिष्ट तिथि को।
टॉक्सालॉट

5
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

यदि आप अपेक्षित तिथि प्रारूप दिखाने के लिए अपने PHP कोड में प्रत्येक फ़ंक्शन को बदलना नहीं चाहते हैं, तो इसे स्रोत पर बदल दें - आपका डेटाबेस।

यह महत्वपूर्ण है के साथ पंक्तियों नाम के रूप में ऊपर के उदाहरण में के रूप में ऑपरेटर (dateFrom के रूप में, dateUntil के रूप में)। आपके द्वारा लिखे गए नाम, नाम हैं, पंक्तियों को आपके परिणाम में कहा जाएगा।

इस उदाहरण का आउटपुट होगा

[महीने का दिन, संख्यात्मक (0..31)]। [महीने का नाम (जनवरी..दिसंबर)] [वर्ष, संख्यात्मक, चार अंक]

उदाहरण: 5.August.2015

पसंद के विभाजक के साथ डॉट्स बदलें और अधिक दिनांक स्वरूपों के लिए DATE_FORMAT (दिनांक, प्रारूप) फ़ंक्शन की जांच करें ।


3

आप अपनी क्वेरी को यूनिक्स टाइमस्टैम्प के रूप में भी वापस कर सकते हैं। कि strtotime()PHP की ओर से कॉल करने और चीजों को थोड़ा कम गहन बनाने की आवश्यकता से छुटकारा मिलेगा ...

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

फिर PHP में, date()फ़ंक्शन का उपयोग करके इसे स्वरूपित करने के लिए जो भी आप चाहते हैं।

<?php
  echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>

या

<?php
  echo date('F j, Y, g:i a', $row->unixtime);
?>

मुझे MySQL के DATE_FORMATफ़ंक्शन का उपयोग करने का विरोध करना पसंद है , क्योंकि यह आपको डेटा को हथियाने के लिए उसी क्वेरी का पुन: उपयोग करने की अनुमति देता है और आपको PHP में स्वरूपण को बदलने की अनुमति देता है।

यूआई में तारीख को देखने के तरीके को बदलने के लिए दो अलग-अलग प्रश्नों का होना कष्टप्रद है।


मुझे UNIX_TIMESTAMPइसकी ज़रूरत को खत्म करने के लिए उपयोग करने का विचार पसंद है strtotime। यह जवाब बेहतर होगा यदि यह प्रारूप के समय का उदाहरण देता है, जो वास्तव में ओपी से अनुरोध करता है।
2

1

आप यूनिक्स टाइमस्टैम्प में वापस नहीं आने की तारीखों से परेशान हो सकते हैं, इसलिए यह मेरे लिए काम करता है ...

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))

1
यह ओपी द्वारा अनुरोधित प्रारूप को दिनांक में परिवर्तित नहीं करता है।
टॉक्सालॉट

1

यह काम करेगा ...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));

1
वह प्रारूप 24 बार AM / PM के साथ मिला करता है। अन्यथा, यह वही स्वीकृत उत्तर है जो 5+ साल पहले पोस्ट किया गया था।
टॉक्सालॉट

0

PHP संस्करण 4.4.9 और MySQL 5.0 का उपयोग करते हुए, इसने मेरे लिए काम किया:

$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate

PubDateMySQL में कॉलम है ।


यह ओपी द्वारा अनुरोधित प्रारूप में दिनांक को परिवर्तित नहीं करता है
विषाक्त काल

0

मेरा सुझाव है कि निम्नलिखित की तरह काम करता है। सबसे पहले, आप mysql- स्वरूपित स्ट्रिंग से एक मूल डेटाटाइम ऑब्जेक्ट बनाते हैं; और फिर आप इसे वैसे ही स्वरूपित करते हैं, जैसा आप चाहते हैं। सौभाग्य से, mysql डेटाइम ISO8601-अनुरूप है, इसलिए कोड स्वयं काफी सरल और सुरुचिपूर्ण दिख सकता है। ध्यान रखें कि उस datetimeकॉलम में टाइमज़ोन जानकारी नहीं है, इसलिए आपको इसे उचित रूप से परिवर्तित करने की आवश्यकता है

यहाँ कोड है:

(new ISO8601Formatted(
    new FromISO8601('2038-01-19 11:14:07'),
    'm/d/Y h:iA'
))
    ->value();

यह आउटपुट 01/19/2038 11:14AM- उम्मीद है कि आप क्या उम्मीद करते हैं।

यह उदाहरण मेरिंग्यू लाइब्रेरी का उपयोग करता है। यदि आप कल्पना करते हैं तो आप इसकी कुछ और जाँच कर सकते हैं ।


-1
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";

1
यह ओपी प्रश्न का उत्तर नहीं देता है। ओपी MySQL प्रारूप से एक तारीख लेना चाहता है और mm / dd / yy H: M (AM / PM) में परिवर्तित करता है । यह विपरीत है। साथ ही यह डेटाबेस के बजाय फॉर्म से इनपुट लेता है।
टॉक्सालॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.