পিএইচপি-তে একটি তারিখের ফর্ম্যাট রূপান্তর করুন


489

আমি থেকে একটি তারিখ রূপান্তর করার চেষ্টা করছি yyyy-mm-ddকরার dd-mm-yyyy(কিন্তু SQL এর যে না); তবে আমি জানি না কীভাবে তারিখ ফাংশনটির জন্য একটি টাইমস্ট্যাম্প দরকার এবং আমি এই স্ট্রিং থেকে টাইমস্ট্যাম্প পেতে পারি না।

এটা কিভাবে সম্ভব?


21
কমপক্ষে আপনার যখন ব্যবহারকারীদের কাছে ডেটা উপস্থাপন করার দরকার হয় তখন ইউরোপের (বেশিরভাগ) ইউএসএইডিডি-মিমি-ইয়েই মানক ফর্ম্যাট।
মাত্তেও রিভা

7
অস্ট্রেলিয়া এবং নিউজিল্যান্ডেও ডিডি-মিমি-ইয়াসি
জোনাথন দিবস

2
মিমি-ডিডি-ইয়ে মার্কিন যুক্তরাষ্ট্রে। @ স্টেস্ট: প্রাক্তনটি এসকিউএল-তে আদর্শ। আমি নিশ্চিত না যে এটি কোনও দেশে মানক । :)
হারবার্ট

10
প্রকৃতপক্ষে, স্ট্যান্ডার্ডটি হ'ল ইউএসআই-মিমি-ডিডি আইএসও 8601 অনুসারে ।
জেজেন টমাস

7
গ্লোবাল "স্ট্যান্ডার্ড" হ'ল ymmy-mm-dd, এবং সর্বদা সম্ভব যেখানেই সম্ভব সিস্টেমগুলি ব্যবহার করা উচিত। অর্ডার দিন, মাস, বছর বিশ্বের বেশিরভাগ লোকেরা (ইউএসএ বাদে) ব্যবহার করে তবে সাধারণত হাইফেন নয়, স্ল্যাশ সহ। বিভ্রান্তি এড়াতে, আমি হাইফেনের সাথে কেবল YYYY-MM-DD আলাদা করি। অন্য কোনও তারিখের ফর্ম্যাট আমি স্ল্যাশগুলির সাথে পৃথক করব। এটি বিষয়গুলিকে সামঞ্জস্য রাখে।
rjmunro

উত্তর:


1055

ব্যবহার করুন strtotime()এবং date():

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

( পিএইচপি সাইটে স্ট্রোটাইম এবং তারিখ ডকুমেন্টেশন দেখুন ))

মনে রাখবেন এটি মূল প্রশ্নের একটি দ্রুত সমাধান ছিল। আরও বিস্তৃত রূপান্তরগুলির জন্য, আপনাকে অবশ্যই DateTimeপার্স এবং ফর্ম্যাট করতে ক্লাসটি ব্যবহার করা উচিত :-)


14
আমি যদি এই এসএসকিউএল থেকে 0000-00-00 তারিখটি পাই? এটি 31/12/1969 এর মতো একটি ভুল তারিখটি ফেরায় ...
এনরিক

3
@ এনারিক: আপনি মাইএসকিউএল থেকে যদি 000-00-00 পান তবে রূপান্তরটির আগে এই প্রথমটি পরীক্ষা করা উচিত। Simples।
ShadowStorm

1
@ সোবিন অগাস্টাইন এট: স্ট্রোটোটাইম () তারিখের স্ট্রিংটিকে "ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করবে (জানুয়ারী 1 1 1970 00:00:00 ইউটিসি থেকে সেকেন্ডের সংখ্যা)", একটি ফর্ম্যাটের তারিখ () বুঝতে পারে এবং সেখান থেকে রূপান্তর করতে পারে। সুতরাং এটি 1970 এর আগে টাইমস্ট্যাম্পের সাথে কাজ করবে না
স্যামুয়েল লিন্ডব্লম

1
@ সামুয়েল লিন্ডব্লম না, এটি এর মতো নয়, এটি 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');

আপনি প্রথমে এটি the তারিখের স্ট্রিংটি ফর্ম্যাটটি দিচ্ছেন Then তারপরে আপনি এটি যে ফর্ম্যাটটি চান তা বলছেন $ নতুনডেটস্ট্রিং to

অথবা যদি উৎস-বিন্যাসে সর্বদা "Ymd" (YYYY-MM-DD) হয়, তাহলে শুধু ব্যবহার তারিখসময় :

<?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
এনবি: পিএইচপি 5.3+ প্রথম দুটি পদ্ধতির জন্য প্রয়োজনীয়।
সালমান ভন আব্বাস

নতুন ডেটটাইম বিকল্পের জন্য আপনাকে ধন্যবাদ। এটি কাজ করেছিল এবং একটি খুব পরিষ্কার বিকল্প ছিল।
নিনা মোরেনা

1
strtotime()সত্য টাইপ ফর্ম্যাট (Ymd) কে অন্য ফর্ম্যাটে রূপান্তর করার জন্য ইউজফুল, তবে DateTime::createFromFormat()সর্বজনীন। এটি STR_TO_DATEমাইএসকিউএলের মতো
তারোন সারিবেকিয়ান

এইটি কেবল আমার পক্ষে বুলশিটের পরিবর্তে কাজ করেছেstrtotime()
কোড কুকার

72

ব্যবহার করুন:

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

ওভারহেডের তারিখ রূপান্তর ব্যতীত, আমি নিশ্চিত নই যে এটি অনেক বেশি পরিমাণে আসবে।


হ্যাঁ, আপনি নিজের জমা হিসাবে উত্তর দিয়েছেন আমি বিশ্বাস করি। অবশ্যই স্ট্রোটাইমে পাওয়া ত্রুটি যাচাইয়ের জন্য দরকারী কিছু হতে পারে।
টিম লিটল

2
অ-আমেরিকান তারিখের ফর্ম্যাট রূপান্তর করতে আমার পক্ষে দরকারী ছিল ... dd-mm-yyyy => yyyy-mm-dd php.net/manual/en/datetime.formats.date.php
ক্রিস জ্যাকব

5
এই উত্তরে কেন ভোট কম তা বুঝবেন না। এটি শীর্ষে উত্তর দেওয়া উচিত। এটি কোনও সমস্যা ছাড়াই কেবল সহজ এবং দ্রুত সমস্যার সমাধান করে। ধন্যবাদ
উল ওয়াহাব

2
এমনকি তারিখের ফর্ম্যাটটিকে তার মূল ফর্মের মধ্যে উল্টানো দরকার থাকলে আপনি এটি আবারও কল করতে পারেন। সত্যিই সেরা উত্তর। :)
পেড্রো আরাউজো জর্জে 15

1
এটি গ্রহণযোগ্য উত্তর হিসাবে পরিবর্তন করা উচিত, এটি তারিখ এবং তারিখের ফর্ম্যাটগুলি ব্যবহারের সমস্ত তারিখ-সময় সমস্যা সমাধান করে।
মাত্তেও বোননি 'পোরার্থার'

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

এই কোডটি প্রতিটি তারিখের ফর্ম্যাটের জন্য কাজ করে।

আপনার পুরানো তারিখের ফর্ম্যাটের কারণে আপনি প্রতিস্থাপনের ভেরিয়েবলগুলির ক্রম পরিবর্তন করতে পারেন $ 3- $ 1- $ 2।


আপনাকে অনেক ধন্যবাদ!
লু ভ্যান চিয়ান


27

এছাড়াও আরেকটি অস্পষ্ট সম্ভাবনা:

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

আমি এটি ব্যবহার করব কিনা জানি না তবে এখনও :)


1
আমি এটি ব্যবহার করে শেষ করেছি কারণ আমাদের অ্যাপ্লিকেশনটিতে লোকেরা "99" প্রবেশ করবে যদি কোনও একটি ক্ষেত্র (দিন, মাস, বছর) অজানা থাকে। আপনার ডেটাতে যদি কোনও "জাল" তারিখ থাকে তবে ভাল দৃষ্টিভঙ্গি।
ভুডো

18

দ্রষ্টব্য : যেহেতু এই পোস্টের উত্তরটি মাঝে মাঝে উত্সাহিত হয়, তাই আমি দয়া করে এখানে ফিরে এসেছি যাতে লোকেদের আর এটিকে উত্সাহিত না করতে বলে। আমার উত্তরটি প্রাচীন, প্রযুক্তিগতভাবে সঠিক নয় এবং এখানে বেশ কয়েকটি আরও ভাল পন্থা রয়েছে। আমি কেবল এটি এখানে historicalতিহাসিক উদ্দেশ্যে রাখছি।

যদিও ডকুমেন্টেশনটি স্ট্রোটাইম ফাংশনটি খারাপভাবে বর্ণনা করেছে, @ আরজমুনরো তার মন্তব্যে বিষয়টি সঠিকভাবে সম্বোধন করেছেন: এটি আইএসও ফর্ম্যাট ডেটে "ওয়াইওয়াইওয়াই-এমএম-ডিডি"।

এছাড়াও, যদিও আমার তারিখ_কভার্টার ফাংশনটি এখনও কার্যকর হতে পারে, আমি সতর্ক করতে চাই যে নীচে অনর্থক বক্তব্য থাকতে পারে, তাই দয়া করে এগুলি অবহেলা করবেন না।

সর্বাধিক ভোট দেওয়া উত্তরটি আসলে ভুল!

পিএইচপি স্ট্রোটোটাইম ম্যানুয়াল এখানে উল্লেখ করেছে যে "ফাংশনটি একটি ইংরাজী তারিখের ফর্ম্যাট যুক্ত একটি স্ট্রিং প্রদানের প্রত্যাশা করে"। এর প্রকৃত অর্থ যা হ'ল এটি আমেরিকান মার্কিন তারিখের ফর্ম্যাট যেমন "এমডিওয়াই" বা "এম / ডি / ওয়াই" প্রত্যাশা করে।

তার মানে হল যে "ওয়াইএমডি" হিসাবে প্রদত্ত একটি তারিখ দ্বারা ভুল ব্যাখ্যা দেওয়া যেতে পারে 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
পড়তে, আমি এটি উপর Ceiroa ঠিক করতে পছন্দ করি। তারিখটি বিস্ফোরিত / বিসর্জন দেওয়ার চেয়ে সহজ উপায়।
ইগোর ডনিন

3
শীর্ষ উত্তরটি ভুল নয়। পিএইচপি একটি ISO ফর্ম্যাট তারিখ "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

নীচে প্রদত্ত পিএইচপি কোডটি ব্যবহার করে আগামীকালের তারিখটি ব্যবহার করে mktime()এর ফর্ম্যাটটি ডিডি / মিমি / ইয়াই ফর্ম্যাটে পরিবর্তন করুন এবং তারপরে এটি মুদ্রণ করুন echo

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

5
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));

1
মাইএসকিউএল তারিখ ফর্ম্যাট Ymd মত "2014-04-26" হয়
AbdulBasit

2

আপনি তারিখ () এবং স্ট্রোটোটাইম () ব্যবহার করে ফর্ম্যাটটি পরিবর্তন করতে পারেন।

$ তারিখ = '9/18/2019';

প্রতিধ্বনি তারিখ ('dm-y', স্ট্রোটোটাইম ($ তারিখ));

ফলাফল:

18-09-19

আমরা (dmy) পরিবর্তন করে ফর্ম্যাটটি পরিবর্তন করতে পারি।


1

এই নির্দিষ্ট রূপান্তরকরণের জন্য আমরা একটি ফর্ম্যাট স্ট্রিংও ব্যবহার করতে পারি।

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

স্পষ্টতই এটি অন্য অনেক তারিখের ফর্ম্যাট রূপান্তরগুলির জন্য কাজ করবে না, তবে যেহেতু আমরা কেবলমাত্র এই ক্ষেত্রে সাবস্ট্রিংগুলি পুনর্বিন্যাস করছি, এটি এটি করার অন্য একটি সম্ভাব্য উপায়।


2019-10-28T17: 02: 49Z কিভাবে টাইমস্ট্যাম্পে রূপান্তর করবেন?
বোগদান বোগদানভ

1
ব্যবহার strtotime()। :-)
হবেন না

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;
}

0
    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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.