PHP में एक तारीख प्रारूप परिवर्तित करें


489

मैं एक तारीख yyyy-mm-ddको dd-mm-yyyy(लेकिन एसक्यूएल में नहीं) से बदलने की कोशिश कर रहा हूं ; हालाँकि मुझे नहीं पता कि दिनांक फ़ंक्शन को टाइमस्टैम्प की आवश्यकता कैसे होती है, और मैं इस स्ट्रिंग से टाइमस्टैम्प प्राप्त नहीं कर सकता।

यह कैसे हो सकता है?


21
dd-mm-yyyy यूरोप में (अधिकांश) कम से कम मानक प्रारूप है जब आपको उपयोगकर्ताओं को डेटा प्रस्तुत करने की आवश्यकता होती है।
मत्तेयो रीवा

7
dd-mm-yyyy ऑस्ट्रेलिया और न्यूजीलैंड में भी
जोनाथन डे

2
संयुक्त राज्य अमेरिका में mm-dd-yyyy। @stesch: SQL में पूर्व मानक है। मुझे यकीन नहीं है कि यह किसी भी देश में मानक है। :)
हर्बर्ट

10
दरअसल, आईएसओ 8601 के अनुसार मानक yyyy-mm-dd है ।
जेजेन थॉमस

7
वैश्विक "स्टैंडर्ड" yyyy-mm-dd है, और हमेशा जहाँ भी संभव हो सिस्टम द्वारा उपयोग किया जाना चाहिए। आदेश दिन, महीने, वर्ष का उपयोग दुनिया के अधिकांश (संयुक्त राज्य अमेरिका को छोड़कर) में लोगों द्वारा किया जाता है, लेकिन आमतौर पर स्लैश के साथ, हाइफ़न नहीं। भ्रम से बचने के लिए, मैं केवल YYYY-MM-DD को हाइफ़न के साथ अलग करता हूं। किसी भी अन्य तारीख प्रारूप मैं स्लैश के साथ अलग हो जाऊंगा। इससे चीजें लगातार बनी रहती हैं।
rjmunro

जवाबों:


1055

उपयोग strtotime()और date():

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));

( PHP साइट पर स्ट्रेटोटाइम और दिनांक प्रलेखन देखें ।)

ध्यान दें कि यह मूल प्रश्न का एक त्वरित समाधान था। अधिक व्यापक रूपांतरणों के लिए, आपको DateTimeकक्षा को पार्स और प्रारूप करने के लिए उपयोग करना चाहिए :-)


14
क्या होगा अगर मुझे mySQL से 0000-00-00 की तारीख मिलती है? यह 31/12/1969 की तरह एक गलत तारीख देता है ...
एनरिक

3
@Enrique: यदि आप MySQL से 000-00-00 प्राप्त करते हैं, तो आपको रूपांतरण के माध्यम से डालने से पहले उस FIRST के खिलाफ परीक्षण करना चाहिए। साधारण।
शैडोस्टॉर्म

1
@SobinAugustine et al: strtotime () दिनांक स्ट्रिंग को "Unix टाइमस्टैम्प (1 जनवरी 1970 से 00:00:00 UTC) के बाद से सेकंड में बदल देगा", एक प्रारूप तिथि () समझ सकती है और फिर इसे बदल सकती है। इसलिए यह 1970 से पहले टाइमस्टैम्प के साथ काम नहीं करेगा।
शमूएल लिंडब्लोम

1
@SamuelLindblom नहीं, ऐसा नहीं है, यह 1970 से पहले काम करेगा।
सोबिन ऑगस्टीन

1
@ सोबिनअगस्टीन: आप सही कह रहे हैं। हालांकि यह 1901-12-14 से पहले काम नहीं करेगा, इसलिए यह अभी भी लागू होता है कि ऊपर सूचीबद्ध तिथियां काम क्यों नहीं करती हैं।
सैमुअल लिंडब्लोम

271

यदि आप स्ट्रेटोटाइम रूपांतरण से बचना चाहते हैं (उदाहरण के लिए, स्ट्रॉटटाइम आपके इनपुट को पार्स करने में सक्षम नहीं है) तो आप इसका उपयोग नहीं कर सकते,

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');

या, समकक्ष:

$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');

आप पहले इसे $ $ स्वरूप दे रहे हैं। फिर आप इसे वह प्रारूप बता रहे हैं जो आप चाहते हैं कि $ newDateString अंदर हो।

या यदि स्रोत-प्रारूप हमेशा "Ymd" (yyyy-mm-dd) होता है, तो बस DateTime का उपयोग करें :

<?php
    $source = '2012-07-31';
    $date = new DateTime($source);
    echo $date->format('d.m.Y'); // 31.07.2012
    echo $date->format('d-m-Y'); // 31-07-2012
?>

17
के लिए धन्यवाद DateTime::createFromFormat()- यह की तुलना में वास्तव में अधिक उपयोगी हैstrtotime()
GTX

2
NB: PHP 5.3 + पहले दो तरीकों के लिए आवश्यक है।
सलमान वॉन अब्बास

नए DateTime विकल्प के लिए धन्यवाद। यह काम किया और एक बहुत ही साफ विकल्प था।
नीना मुरैना

1
strtotime()सही प्रकार के प्रारूप (Ymd) को अन्य प्रारूपों में परिवर्तित करने के लिए उपयोगी है, लेकिन DateTime::createFromFormat()सार्वभौमिक है। यह STR_TO_DATEMySQL की तरह है
Taron Saribekyan

यह वास्तव में मेरे लिए बकवास के बजायstrtotime()
कोड कुकर

72

उपयोग:

implode('-', array_reverse(explode('-', $date)));

ओवर डेट रूपांतरण के बिना, मुझे यकीन नहीं है कि यह बहुत मायने रखेगा।


हाँ, जवाब दिया कि आपने मुझे विश्वास दिलाया है बेशक स्ट्रेटोटाइम में पाई गई त्रुटि जाँच कुछ उपयोगी हो सकती है।
टिम लिटल

2
गैर-अमेरिकी तिथि प्रारूप को परिवर्तित करने में मेरे लिए उपयोगी था ... dd-mm-yyyy => yyyy-mm-dd देखें php.net/manual/en/datetime.formats.date.php
याकूब

5
यह मत समझिए कि इस उत्तर में कम वोट क्यों हैं। यह शीर्ष मतदान का जवाब होना चाहिए। यह समस्या को बिना किसी मुद्दे के सिर्फ और सिर्फ तेजी से हल करता है। धन्यवाद
Naeem उल वहाब

2
यदि आप तिथि प्रारूप को उसके मूल स्वरूप में उलटाने की आवश्यकता है, तो आप इसे फिर से कॉल कर सकते हैं। सर्वश्रेष्ठ उत्तर वास्तव में। :)
पेड्रो आराजू जोर्ज

1
इसे स्वीकार किए गए उत्तर के रूप में बदला जाना चाहिए, यह दिनांक और दिनांक स्वरूपों का उपयोग करने के सभी दिनांक-समय के मुद्दे को हल करता है।
मट्टियो बोनोनी 'सहकर्मी'

38
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

यह कोड हर दिनांक प्रारूप के लिए काम करता है।

आप अपने पुराने दिनांक प्रारूप के कारण प्रतिस्थापन चर जैसे $ 3- $ 1- $ 2 के क्रम को बदल सकते हैं।


आपका बहुत बहुत धन्यवाद!
Lê Văn Chiến

28
$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

अधिक के लिए, के लिए प्रलेखनstrtotime देखें ।

या इससे भी कम:

$new_date = date('d-m-Y', strtotime(your date variable));

27

इसके अलावा एक और अस्पष्ट संभावना:

$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];

मुझे नहीं पता कि मैं इसका इस्तेमाल करूंगा लेकिन फिर भी :)


1
मैंने इसका उपयोग करना समाप्त कर दिया क्योंकि हमारे आवेदन में, लोग "99" दर्ज करेंगे यदि कोई फ़ील्ड (दिन, महीना, वर्ष) अज्ञात है। यदि आपके डेटा में कोई "नकली" तारीख है तो अच्छा तरीका।
वूडू

18

नोट : क्योंकि इस पोस्ट का उत्तर कभी-कभी उठ जाता है, इसलिए मैं लोगों से विनम्रतापूर्वक यह पूछने के लिए वापस आया कि अब इसे न बढ़ाएं। मेरा उत्तर प्राचीन है, तकनीकी रूप से सही नहीं है, और यहाँ कई बेहतर दृष्टिकोण हैं। मैं इसे केवल ऐतिहासिक उद्देश्यों के लिए यहाँ रख रहा हूँ।

हालाँकि डॉक्युमेंटेशन स्ट्रेटटाइम फ़ंक्शन का खराब वर्णन करता है, @rjmunro ने अपनी टिप्पणी में इस मुद्दे को सही ढंग से संबोधित किया: यह आईएसओ प्रारूप तिथि "YYYY-MM-DD" में है।

इसके अलावा, भले ही मेरा Date_Converter फ़ंक्शन अभी भी काम कर सकता है, मैं चेतावनी देना चाहूंगा कि नीचे दिए गए कुछ गलत बयान हो सकते हैं, इसलिए कृपया उन्हें अवहेलना करें।

सबसे अधिक मतदान का उत्तर वास्तव में गलत है!

पीएचपी strtotime मैनुअल यहाँ कहा गया है कि "समारोह की उम्मीद है एक स्ट्रिंग एक अंग्रेजी दिनांक स्वरूप युक्त दिए जाने की"। वास्तव में इसका क्या मतलब है कि यह एक अमेरिकी अमेरिकी तिथि प्रारूप की उम्मीद करता है, जैसे कि "mdY" या "m / d / Y"।

इसका मतलब है कि "यमद" के रूप में प्रदान की गई तारीख का गलत अर्थ निकाला जा सकता है strtotime। आपको अपेक्षित प्रारूप में तारीख प्रदान करनी चाहिए।

मैंने कई प्रारूपों में तारीखों को लौटाने के लिए एक छोटा समारोह लिखा। उपयोग करें और इच्छा में संशोधन करें। अगर कोई इसे कक्षा में बदलता है, तो मुझे खुशी होगी कि अगर इसे साझा किया जाएगा।

function Date_Converter($date, $locale = "br") {

    # Exception
    if (is_null($date))
        $date = date("m/d/Y H:i:s");

    # Let's go ahead and get a string date in case we've
    # been given a Unix Time Stamp
    if ($locale == "unix")
        $date = date("m/d/Y H:i:s", $date);

    # Separate Date from Time
    $date = explode(" ", $date);

    if ($locale == "br") {
        # Separate d/m/Y from Date
        $date[0] = explode("/", $date[0]);
        # Rearrange Date into m/d/Y
        $date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
    }

    # Return date in all formats
        # US
        $Return["datetime"]["us"] = implode(" ", $date);
        $Return["date"]["us"]     = $date[0];

        # Universal
        $Return["time"]           = $date[1];
        $Return["unix_datetime"]  = strtotime($Return["datetime"]["us"]);
        $Return["unix_date"]      = strtotime($Return["date"]["us"]);
        $Return["getdate"]        = getdate($Return["unix_datetime"]);

        # BR
        $Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
        $Return["date"]["br"]     = date("d/m/Y", $Return["unix_date"]);

    # Return
    return $Return;

} # End Function

2
पर पढ़ना, मुझे पसंद है Ceyroa इस पर तय करते हैं। यह तारीख को विस्फोट / फंसाने की तुलना में आसान है।
इगोर डोनिन

3
शीर्ष उत्तर गलत नहीं है। PHP एक आईएसओ प्रारूप तिथि "YYYY-MM-DD" के साथ सही काम करता है। इसे यूएस दिनांक के रूप में गलत नहीं समझा जा सकता है, क्योंकि इसकी शुरुआत में 4 अंक हैं, और यह विभाजक के रूप में उपयोग करता है / नहीं। आईएसओ तिथियों को सावधानीपूर्वक डिजाइन किया गया था ताकि अन्य प्रारूपों के साथ भ्रमित न हों।
rjmunro

14

इसे लागू करने के दो तरीके हैं:

1।

    $date = strtotime(date);
    $new_date = date('d-m-Y', $date);

2।

    $cls_date = new DateTime($date);
    echo $cls_date->format('d-m-Y');


8

किसी भी प्रारूप से किसी भी प्रारूप में परिवर्तित करने के लिए इस फ़ंक्शन का उपयोग करें

function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
    $date_aux = date_create_from_format($from_format, $date);
    return date_format($date_aux,$to_format);
}

7

नीचे दिए गए PHP कोड को कल की तारीख का उपयोग कर उत्पन्न करने mktime()और अपने प्रारूप को dd / mm / yyyy प्रारूप में बदलने और फिर इसका उपयोग करके प्रिंट करने के लिए दिया गया है echo

$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);


2

आप दिनांक () और strtotime () का उपयोग करके प्रारूप को बदल सकते हैं।

$ तारीख = '9/18/2019';

इको डेट ('डीएम-वाई', स्ट्रेटोटाइम ($ तारीख));

परिणाम:

18-09-19

हम (डमी) को बदलकर प्रारूप बदल सकते हैं।


1

इस विशिष्ट रूपांतरण के लिए हम एक प्रारूप स्ट्रिंग का भी उपयोग कर सकते हैं।

$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));

स्पष्ट रूप से यह कई अन्य दिनांक प्रारूप रूपांतरणों के लिए काम नहीं करेगा, लेकिन जब से हम इस मामले में सबस्ट्रिंग को फिर से व्यवस्थित कर रहे हैं, यह करने का एक और संभव तरीका है।


2019-10-28T17: 02: 49Z को टाइमस्टैम्प में कैसे बदलें?
बोगदान बोगदानोव

1
का उपयोग करें strtotime()। :-)
पैनिक

1
    function dateFormat($date) {
        $m = preg_replace('/[^0-9]/', '', $date);
        if (preg_match_all('/\d{2}+/', $m, $r)) {
        $r = reset($r);
            if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
            if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
            if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
            if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
        }
    }

var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31

0

सरल तरीका उपयोग strtotime()और date():

$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));

समय के साथ

$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));

0

का उपयोग करें date_createऔरdate_format

इसे इस्तेमाल करे।

function formatDate($input, $output){
  $inputdate = date_create($input);
  $output = date_format($inputdate, $output);
  return $output;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.