MySQL में डेटाइम में सम्मिलित करते समय PHP दिनांक () प्रारूप


324

date()अगर मैं एक MySQL datetimeप्रकार कॉलम में परिणाम सम्मिलित करना चाहता हूं, तो PHP में फ़ंक्शन को पास करने के लिए सही प्रारूप क्या है ?

मैं कोशिश कर रहा हूँ, date("Y-M-D G:i:s")लेकिन हर बार "0000-00-00 00:00:00" सम्मिलित करता है।


3
चूंकि आप आज तक एक पैरामीटर की आपूर्ति नहीं कर रहे हैं, क्या आप वास्तव में वर्तमान समय को रिकॉर्ड करना चाहते हैं?
मार्क इलियट

जवाबों:


680

समस्या यह है कि आप उपयोग कर रहे हैं 'M'और 'D', जो एक पाठीय अभ्यावेदन हैं, MySQL प्रारूप के एक संख्यात्मक प्रतिनिधित्व की उम्मीद कर रहा है2010-02-06 19:30:13

कोशिश करें: date("Y-m-d H:i:s")जो संख्यात्मक समकक्षों का उपयोग करता है।

संपादित करें: पर स्विच Gकिया Hजा सकता है, हालांकि इसका प्रभाव नहीं हो सकता है, आप संभवतः अग्रणी 0s के साथ 24-घंटे के प्रारूप का उपयोग करना चाहते हैं।


28
यह सबसे आम डेटाटाइम स्वरूपों में से एक होना चाहिए जिसे किसी को भी कभी भी आवश्यकता होगी। php ग्लोबल या डेट फंक्शन के हिस्से में ही बनाया जाना चाहिए (जैसे, 'c', 'r')
billynoah

33
ऐसा क्यों है, यह मैं नहीं जानता। मुझे हर ओवर को ढेर करना है। एक। कार्य कर रहा। समय।
Mazatec

11
इस तरह से उपयोग के लिए मेरे कोड में खोज की तुलना में यहां आना तेजी से है।
MRodrigues 13

64
प्रारूप को याद करने के लिए बस एक सुंदर महामारी के बारे में सोचा: " वाई हमारे एम वाई डी ने खाया नहीं उसका "। इतने सारे स्तरों पर काम करता है :)
IzzEps

2
इसके लिए php शॉर्टहैंड होना चाहिए क्योंकि ISO 8601 और RFC 2822 के लिए है
billynoah

105

Php के date()मैनुअल पेज की टिप्पणियों से :

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>

आपके पास 'Y' सही था - यह एक पूर्ण वर्ष है, लेकिन 'M' एक तीन वर्ण वाला महीना है, जबकि 'm' एक दो अंक वाला महीना है। 'डी' के बजाय 'डी' के साथ एक ही मुद्दा। 'G' एक 1 या 2 अंक का घंटा होता है, जहां 'H' की जरूरत पड़ने पर हमेशा अग्रणी 0 होता है।


1
धन्यवाद @Pekka - मुझे याद है जब आप और मैं लगभग एक ही प्रतिनिधि थे - आप बहुत सक्रिय रहे हैं।
टिम लिटल

1
हाँ, मैं अभी बहुत काम कर रहा हूं, और SO मेरा पसंदीदा शगल है बीच में :) जो फिर से बदल जाएगा।
पाइका

41

यहाँ एक वैकल्पिक समाधान है: यदि आपके पास PHP में एक टाइमस्टैम्प के रूप में तारीख है, तो इसे PHP के साथ संभाल कर बाईपास करें और DB को FROM_UNIXTIMEफ़ंक्शन का उपयोग करके इसे बदलने का ख्याल रखें ।

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+

यह एक सुंदर समाधान है।
धन्यवाद

2
@trejder, किसने आपको बताया कि mysql में करना php में करने से ज्यादा तेज है? इसे PHP में करना बेहतर है क्योंकि DB आमतौर पर अड़चन है और आप asap में और बाहर निकलना चाहते हैं ।
पेसियर

1
@Pacerier DB वह अड़चन है यदि आपके पास खराब तरीके से निर्मित DB है, या अधिक मजबूत प्रभावी एकल क्वेरी के बजाय, या बहुत सारे मामलों में बहुत छोटे प्रश्न चला रहे हैं, यदि आप डेटाबेस का प्रबंधन करने के लिए ORM पर भरोसा करते हैं। एक अच्छी तरह से अनुक्रमित रिलेशनल डेटाबेस के साथ ठोस SQL ​​धीमा नहीं है।
mopsyd

2
@ मॉप्सिड, डीबी अड़चन है क्योंकि इसे क्षैतिज रूप से स्केल करने से जटिलता की आवश्यकता होती है। किसी भी कोड परिवर्तन के बिना दुनिया भर में दोहराया जा सकता है कि webservers के लिए तुलना करें।
पचेरियर

1
यदि क्वेरी विफल हो जाती है, तो कहीं लॉग किया जाता है, और आपको इसे डीबग करना होगा, तो @ टाइम-लिटल द्वारा वर्णित फॉर्मेट डेट स्ट्रिंग की तुलना में टाइमस्टैम्प को पढ़ना बहुत कठिन है।
हम्बड्स

27

मैं एक चर बनाने के लिए निम्नलिखित PHP कोड का उपयोग करता हूं जिसे मैं MySQL DATETIME कॉलम में सम्मिलित करता हूं।

$datetime = date_create()->format('Y-m-d H:i:s');

यह सर्वर की वर्तमान तिथि और समय आयोजित करेगा।


12
$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`

2
यद्यपि यह कोड प्रश्न का उत्तर दे सकता है, क्यों और / या कैसे का उत्तर देता है के संबंध में अतिरिक्त संदर्भ प्रदान करने से इसके दीर्घकालिक मूल्य में काफी सुधार होगा। कृपया कुछ स्पष्टीकरण जोड़ने के लिए, और अपनी प्रारूपण समस्याओं को ठीक करने के लिए अपने उत्तर को संपादित करें।
टोबी स्पाइट


8

PHP के साथ MySQL डेटाइम फॉर्मेट करें

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

8

मैं इस फ़ंक्शन का उपयोग करता हूं (PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

PHP के पुराने संस्करण (PHP <7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

मैंने आपके उत्तर पर मतदान किया है क्योंकि मैंने पहली पंक्ति को संपादित करने के बाद काम किया है; function getDateForDatabase(string $date) : string {करने के लिए function getDateForDatabase($date) {क्यों प्रकार घोषणाओं एक त्रुटि फेंक मैं बताने के लिए पर्याप्त पीएचपी पता नहीं है।
क्रिस पिंक

"तर्क 1 getDateForDatabase () में स्ट्रिंग का एक उदाहरण होना चाहिए, दिया गया स्ट्रिंग," - मेरा इनपुट एक स्ट्रिंग था,
क्रिस पिंक

7

अगर आपको टाइमस्टैम्प का उपयोग नहीं करना है, तो PHP से दिनांक () विधि का उपयोग करने की कोई आवश्यकता नहीं है। यदि datepostedएक डेटाइम कॉलम है, तो आप वर्तमान तिथि को इस तरह सम्मिलित कर सकते हैं:

$db->query("INSERT INTO table (dateposted) VALUES (now())");

2
इस दृष्टिकोण को साझा करने के लिए धन्यवाद। यह अब तक की सबसे आसान विधि है।
शोन्डेसलिच

2

यह मुझे एक सरल उत्तर की तलाश में पागल कर रहा है। अंत में मैंने यह फ़ंक्शन बनाया जो सभी इनपुट को पकड़ता है और एक अच्छा एसक्यूएल स्ट्रिंग देता है जो सही या कम से कम मान्य और जाँच योग्य है। अगर यह 1999-12-31 है, तो यह शायद गलत है, लेकिन MySQL में कोई गलत त्रुटि नहीं करेगा।

function MakeSQLDate($date) {
    if (is_null($date)) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    }

    if (($t = strtotime($date)) === false) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    } else {
        return date('Y-m-d H:i:s', strtotime($date));
    }
}

1

DateTimePHP7 + में क्लास का उपयोग करना :

function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
    $dt = new DateTime();
    $dt->setTimezone(new DateTimeZone('UTC'));
    $dt->setDate($year, $month, $day);
    $dt->setTime(0, 0, 0, 0); // set tine to midnight

    return $dt->format("Y-m-d H:i:s");
}

1

स्वीकृत उत्तर के लिए एक छोटा सा परिशिष्ट: यदि डेटाबेस datetimeको यूटीसी (मैं हमेशा क्या करता हूं) के रूप में संग्रहीत किया जाता है, तो आपको gmdate("Y-m-d H:i:s")इसके बजाय उपयोग करना चाहिए date("Y-m-d H:i:s")

या, यदि आप MySQL को सब कुछ संभालने देना पसंद करते हैं, जैसा कि कुछ उत्तर सुझाते हैं, तो मैं UTC_TIMESTAMPउसी परिणाम के साथ MySQL सम्मिलित करूंगा ।

नोट: मुझे वर्तमान समय का संदर्भ देते हुए प्रश्न समझ में आया।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.