মাইএসকিউএল ডেটটাইম থেকে পিএইচপি দিয়ে অন্য ফর্ম্যাটে রূপান্তর করুন


447

আমার datetimeমাইএসকিউএলে একটি কলাম রয়েছে।

আমি কীভাবে এটিকে পিএমপি ব্যবহার করে মিমি / ডিডি / ইয়াই এইচ: এম (এএম / এএম) হিসাবে ডিসপ্লেতে রূপান্তর করতে পারি ?


4
আমাদের যা জানতে হবে তা হল এসকিউএল-এর মধ্যে কীভাবে তারিখটি সংরক্ষণ করা হয়। এটি টাইমস্ট্যাম্প বা ডেটটাইম বা ইউনিক্সটাইম?
ইলফুর ওয়েজ

এগুলি ইউনিক্স সময়ে সংরক্ষণ করা হয় না, যেমন একটি সাধারণ তারিখের মতো, পিএইচপি হ'ল এটি সেকেন্ড এবং স্টাফ হিসাবে ডিল করে। আমি আপনাকে পিএইচপি OOPডেটটাইম ফাংশনগুলি ব্যবহার করার পরামর্শ দিচ্ছি , সেগুলি ব্যবহার করা খুব সহজ।
গুচো সিএ

2
আমি কি আপনার তারিখের ফর্ম্যাটের বিকল্প প্রস্তাব করতে পারি? mm/dd/yyখুব আমেরিকান, এবং আমরা যারা বিশ্বের অন্যান্য অঞ্চলে বাস করি তারা কী বোঝাতে চাইছে তা দ্বিতীয় অনুমান করার চেষ্টা করতে একটু বিরক্তির চেয়ে বেশি পেয়ে যায় 11-12-13। আরও সর্বজনীন মান হ'ল yyyy-mm-ddএবং এটি আইএসও 8601 স্ট্যান্ডার্ডের একটি অংশ। এটি ব্যর্থ হওয়ায় আপনার নামটি মাসের নাম ব্যবহার করা উচিত ।
মানংগো

উত্তর:


516

আপনি যদি মাইএসকিউএল ফর্ম্যাটে কোনও তারিখকে স্বাভাবিক করার উপায় খুঁজছেন তবে নিম্নলিখিতটি ব্যবহার করুন

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

লাইনটি $phpdate = strtotime( $mysqldate )একটি স্ট্রিং গ্রহণ করে এবং সেই স্ট্রিংটিকে একটি ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করতে হিউরিস্টিকের একটি সিরিজ সম্পাদন করে।

লাইনটি $mysqldate = date( 'Y-m-d H:i:s', $phpdate )টাইমস্ট্যাম্প এবং পিএইচপি এর dateফাংশনটি ব্যবহার করে সেই টাইমস্ট্যাম্পটিকে মাইএসকিউএল এর স্ট্যান্ডার্ড ডেট ফর্ম্যাটে ফিরিয়ে দেয়।

( সম্পাদক দ্রষ্টব্য : বিভ্রান্তিকর শব্দাবলীর সাথে একটি আসল প্রশ্নের কারণে এই উত্তরটি এখানে রয়েছে, এবং সাধারণ গুগল উপযোগিতা এই উত্তরটি প্রদান করেছে এমনকি যদি 'বর্তমানে বিদ্যমান প্রশ্নের সরাসরি উত্তর দেয় না)


19
এই উত্তরটি বিষয়টিকে বিভ্রান্ত করছে
অ্যালেক্স কে ২

5
@ 0xBAADF00D: দয়া করে আবার প্রশ্নটি পড়ুন ... কেউ মাইএসকিউএল স্ট্যান্ডার্ড ফর্ম্যাট সম্পর্কে জিজ্ঞাসা করেনি।
ব্যবহারকারী 7116

3
অবশ্যই, তবে, যখন স্ট্যান্ডার্ড বিদ্যমান থাকে, স্ট্যান্ডার্ডটি অনুসরণ করা ভাল হতে পারে (পরে আপনার
মাথাতে

4
প্রশ্নটি "Ymd H: i: s" নয়, mm / dd / yy H: M (AM / PM) ফর্ম্যাটে আউটপুট দিতে বলেছে।
রিক্কি

6
does not workকার জন্য? গৃহীত উত্তর যদি আপনি রূপান্তর করতে চান কাজ করবে থেকে মধ্যে মাইএসকিউএল MM / DD / YY এইচ: এম (পূর্বাহ্ণ / অপরাহ্ণ) যেমন ওপি অনুরোধ করা হয়েছে। আপনি বিপরীত কাজটি করতে চান বলে গ্রহণযোগ্য উত্তর ভুল করে না।
টক্সালোট

311

মাইএসকিউএল থেকে প্রাপ্ত তারিখকে অনুরোধ করা ফর্ম্যাটে রূপান্তর করতে 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

পড়ুন অপশন বিন্যাস পিএইচপি তারিখ বিন্যাস সমন্বয়।


এই বিষয়টি কোথা $rowথেকে আসার কথা?
মাইকে

25
আমি ভুল হতে পারি, তবে আমি মনে করি আপনারা কেউ কেউ এই বিষয়টি অনুপস্থিত। তিনি আউটপুটটি "এম / ডি / ইজি: আই এ" ফর্ম্যাটে থাকতে চান এবং একটি তারিখের সময় ক্ষেত্র থেকে আসল তারিখটি টানবেন। সুতরাং তার কোড কাজ করে। @ মাইক $ সারি-> তৈরি কেবলমাত্র টিমের ডেটটাইম কলাম।
আমার উন্নয়ন

4
@ এসটিআর উত্তরটি কেবল বিভ্রান্তিকর যদি আপনি প্রশ্নটি ভুলভাবে পড়ে থাকেন। ওপি নিজের প্রশ্নের উত্তরে একটি তারিখ নিতে চায় থেকে অনুরোধ ফর্ম্যাটে মাইএসকিউএল এবং আউটপুট: MM / DD / YY এইচ: এম (পূর্বাহ্ণ / অপরাহ্ণ)
টক্সালোট

@TimBoland আমি উত্তর উন্নত করা যেতে পারে যদি মনে করেন থেকে পাশাপাশি অনুরোধ বিন্যাস যেমন জোর ছিল MM / DD / YY এইচ: এম (পূর্বাহ্ণ / অপরাহ্ণ) । এবং এটি তারিখ ফাংশনের একটি লিঙ্ক থেকে উপকৃত হতে পারে। আমি একটি সম্পাদনার পরামর্শ দেওয়ার চেষ্টা করেছি , তবে তা প্রত্যাখ্যান করা হয়েছিল।
toxalot

1
মজাদার ঘটনা: এই উত্তরটি ঠিক নীচেরটির সাথে সমান (যার কার্যত কোনও ডাউনভোট নেই) তবে এটি 40 টি ডাউনভোট পেয়েছে কারণ এটি ওপির প্রশ্নের উত্তর দেয়, যা এই পৃষ্ঠায় আসা লোকেরা আসলে যা আছে তার থেকে পৃথক fers
ক্লাইমেন্ট

110

আপনি যদি পিএইচপি 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 আরও ভাল হবে।
টক্সালোট

@ টক্সালোট গৃহীত উত্তরটি ভুল। এটি আমার উত্তরের পরে এবং আমার লিঙ্কটি সম্পর্কে আমি আপনার লিঙ্কটি প্রতিস্থাপন করেছি। ধন্যবাদ
টনি স্টার্ক

1
এই পুরো প্রশ্নোত্তর একটি দৃord় ইতিহাস রয়েছে। গৃহীত উত্তর ছিল 29 এপ্রিল, 2013 ও মে 24 মধ্যে ভুল, 2013 এটা সঠিক ছিল যখন প্রথম আপনি আপনার উত্তর পোস্ট করা হয়েছে। আপনার উত্তরটি 29 ই মে, 2013 পর্যন্ত ভুল ছিল , এর পরে এটি গ্রহণযোগ্য উত্তরের সাথে খুব মিল হয়ে যায়।
টক্সালোট

23

পরিশেষে পিএইচপি 5.3 এবং এর উপরে সঠিক সমাধান: (মন্তব্যে উল্লিখিত মত উদাহরণের সাথে optionচ্ছিক টাইমজোন যুক্ত করা হয়েছে)

$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 ব্যবহার করে
aswzen

1
আপনি যদি অন্য কোনও নেমস্পেসে কাজ করছেন, আপনার সামনে একটি ব্যাকস্ল্যাশ দিয়ে এটিকে কল করতে হবে:\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
হাসেনপ্রাইস্টার

2
আপনি যখন আপনার তারিখ অবজেক্ট তৈরি করবেন তখন সময় অঞ্চল নির্দিষ্ট করতে ভুলবেন না! অন্যথায়, আপনার ফর্ম্যাটেড তারিখটি কয়েক ঘন্টা বন্ধ থাকতে পারে। আপনার datetimeকলামগুলি UTF8 হওয়া উচিত, সুতরাং new DateTimeZone('UTC')পিএইচপি জানে তা নিশ্চিত করতে তৃতীয় প্যারামিটার হিসাবে পাস করুন ।
এরিক সাস্টার্যান্ড

এটিই সঠিক উত্তর যা ওপি'র পছন্দসই বিন্যাসকে
হিসাবরক্ষক

12

একটি সহজ উপায় হ'ল পিএইচপি পরিবর্তে, সরাসরি মাইএসকিউএল কোয়েরিতে তারিখটি ফর্ম্যাট করা। DATE_FORMAT এর জন্য মাইএসকিউএল ম্যানুয়াল এন্ট্রি দেখুন ।

যদি আপনি এটি পিএইচপিতে করতে চান তবে আপনার তারিখের ফাংশনটি প্রয়োজন তবে আপনাকে আপনার ডাটাবেস মানটি একটি টাইমস্ট্যাম্পে রূপান্তর করতে হবে।


11
-1 কারণ ডিবিতে ফর্ম্যাট করার তারিখটি ভাল ধারণা নয়। বহুভাষার ওয়েবে বিভিন্ন তারিখের ফর্ম্যাট প্রয়োজন এবং তারপরে আপনাকে পিএইচপিতে তারিখের ফর্ম্যাট করতে হয় (ব্যবসায়িক লজিক ভাষা সাধারণভাবে)। আপনি যখন dateফাংশন সম্পর্কে লিখেছেন , তারপরে আপনাকে strottime"তবে আপনার প্রথমে আপনার ডাটাবেস মানটি একটি টাইমস্ট্যাম্পে রূপান্তর করতে হবে" এর পরিবর্তে কাউকে সহায়তা করার জন্য ফাংশন সম্পর্কেও লিখতে হবে।
বরিস Šuška

10

সব ভুলে যাও. শুধু ব্যবহার করুন:

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

9

DateTimeমাইএসকিউএল সংরক্ষণের জন্য পিএইচপি-তে কোনও অবজেক্টকে সঠিকভাবে ফর্ম্যাট করতে মাইএসকিউএল ব্যবহার করে এমন স্ট্যান্ডার্ডযুক্ত ফর্ম্যাটটি ব্যবহার করুন যা আইএসও 8601

পিএইচপি এই সংস্করণটি 5.1.1 সংস্করণ থেকে ধ্রুবক হিসাবে সঞ্চিত আছে এবং আমি প্রতিবার স্ট্রিংটি ম্যানুয়ালি টাইপ না করে বরং এটি ব্যবহার করার পরামর্শ দিচ্ছি।

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

এটি এবং অন্যান্য পিএইচপি ডেটটাইম ধ্রুবকগুলির একটি তালিকা http://php.net/manual/en/class.dateime.php#datetime.constants.tyype এ উপলব্ধ are


মাইএসকিউএল আসলে এই ফর্ম্যাটটি ব্যবহার করে না এবং মাইএসকিউএল একটি সতর্কতা জেনারেট করে যদি আপনি "+ xxxx" টাইম জোন ডিজাইনারকে এর দ্বারা উত্পন্ন হয়। আপডেট করুন এক্স সেট ওয়াই = '2014-03-31T15: 00: 00 + 0100' যেখানে জেড; অনুসন্ধান ঠিক আছে, 0 টি সারি প্রভাবিত হয়েছে, 1 টি সতর্কতা (0.06 সেকেন্ড) সারি মিলছে: 1 পরিবর্তন হয়েছে: 0 সতর্কতা: 1
জর্জ লুন্ড

ওপি মাইএসকিউএল ফর্ম্যাট থেকে একটি তারিখ নিতে এবং মিমি / ডিডি / ইয়াই এইচ: এম (এএম / এএম) রূপান্তর করতে চায় ।
টক্সালোট

8

এটি একটি এসকিউএল কোয়েরিতে একটি ক্ষেত্র ফর্ম্যাট করা উচিত:

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

আপনার কেবল মাইএসকিউএল কোয়েরি নির্দিষ্ট করা উচিত , কেবল এসকিউএল নয়, কারণ এটি অগত্যা সমস্ত ডাটাবেসের সাথে কাজ করবে না। ওপি পিএইচপি সমাধানের জন্য জিজ্ঞাসা করার সময়, এটি একটি ভাল বিকল্প যা ওপি সম্পর্কে জানা থাকতে পারে না। তবে এটি অনুরোধ করা ফর্ম্যাটটি সরবরাহ করবে না। ওপি অনুরোধ করা ফর্ম্যাটটি পেতে, আপনার প্রয়োজন হবে '%m/%d/%y %h:%i %p'
টক্সালোট

7

তারিখ ফাংশন ব্যবহার করুন :

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

25
তারিখ () ফাংশনটি প্রশ্নের মধ্যে নির্দিষ্ট তারিখের চেয়ে পূর্ণসংখ্যার টাইমস্ট্যাম্পের প্রত্যাশা করে না?
লফটেক্স

5

আপনার মাইএসকিউএল ডেটটাইম কনফিগারেশন উপর নির্ভর করে। সাধারণত: 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
এটি ওপি প্রশ্নের উত্তর দেয় না। ওপি মাইএসকিউএল ফর্ম্যাট থেকে একটি তারিখ নিতে এবং মিমি / ডিডি / ইয়াই এইচ: এম (এএম / এএম) রূপান্তর করতে চায় । প্লাস এটি কেবলমাত্র বর্তমান সময়ের ফর্ম্যাট করবে, নির্দিষ্ট তারিখ নয়।
toxalot

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

যদি আপনি আপনার পিএইচপি কোডের প্রতিটি ফাংশন পরিবর্তন করতে চান না, প্রত্যাশিত তারিখের ফর্ম্যাটটি দেখানোর জন্য, উত্সে এটি পরিবর্তন করুন - আপনার ডাটাবেস।

উপরের উদাহরণ হিসাবে অপারেটর হিসাবে সারিগুলির নামকরণ গুরুত্বপূর্ণ (ডেটফ্রোম হিসাবে, ডেটআউন্টিল হিসাবে)। আপনি যে নামগুলি সেখানে লিখবেন সেগুলির নামগুলি রয়েছে, সারিগুলি আপনার ফলস্বরূপ বলা হবে।

এই উদাহরণের আউটপুট হবে

[মাসের দিন, সংখ্যা (0..31)]। [মাসের নাম (জানুয়ারী.. ডিসেম্বর)]। [বছর, সংখ্যা, চার অঙ্ক]

উদাহরণ: 5. আগস্ট ২০১৫

পছন্দের বিভাজকের সাথে বিন্দুগুলি পরিবর্তন করুন এবং আরও তারিখের ফর্ম্যাটের জন্য DATE_FORMAT (তারিখ, ফর্ম্যাট) ফাংশনটি পরীক্ষা করুন ।


3

আপনার ক্যোয়ারীটি ইউনিক্স টাইমস্ট্যাম্প হিসাবে সময় ফিরিয়ে দিতে পারে। strtotime()এটি পিএইচপি পক্ষের কাছে ফোন করার এবং জিনিসগুলিকে কিছুটা নিবিড় করে তোলার প্রয়োজন থেকে মুক্তি পাবে ...

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

তারপরে পিএইচপি-তে কেবল 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);
?>

আমি মাইএসকিউএল এর DATE_FORMATফাংশনটি ব্যবহার করার বিপরীতে এই পদ্ধতির পছন্দ করি , কারণ এটি আপনাকে একই প্রশ্নটি ডেটা ধরতে পুনরায় ব্যবহার করতে দেয় এবং আপনাকে পিএইচপি-তে ফরম্যাটিং পরিবর্তন করতে দেয়।

তারিখটি ইউআই-তে প্রদর্শিত হওয়ার পরিবর্তনের জন্য দুটি পৃথক প্রশ্ন থাকা খুব বিরক্তিকর।


আমি UNIX_TIMESTAMPপ্রয়োজনীয়তা অপসারণ করতে ব্যবহার করার ধারণা পছন্দ করি strtotime। এই উত্তরটি যদি ওপরে অনুরোধ করা ফর্ম্যাটটিতে সময় ফর্ম্যাট করার উদাহরণ দেয় তবে এটি আরও ভাল হবে।
টক্সালোট

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 বার মিশে যায়। অন্যথায়, এটি গৃহীত উত্তর হিসাবে একই যা 5+ বছর আগে পোস্ট করা হয়েছিল।
টক্সালোট


0

আমি প্রস্তাবিত পদ্ধতির নীচের মত কাজ করে। প্রথমত, আপনি একটি মাইএসকিএল-ফর্ম্যাট স্ট্রিং থেকে একটি মৌলিক ডেটটাইম অবজেক্ট তৈরি করেন; এবং তারপরে আপনি এটি আপনার পছন্দ মতো ফর্ম্যাট করেন। ভাগ্যক্রমে, মাইএসকিএল তারিখের সময়টি আইএসও 8601 অনুসারে হয়, তাই কোডটি নিজেই বেশ সহজ এবং মার্জিত দেখতে পারে। মনে রাখবেন যে এই datetimeকলামটিতে টাইমজোন সম্পর্কিত তথ্য নেই, সুতরাং আপনাকে এটিকে যথাযথ রূপান্তর করতে হবে

কোডটি এখানে:

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

এটি ফলাফল 01/19/2038 11:14AM- আশা আপনি কি আশা করি।

এই উদাহরণটি meringue গ্রন্থাগার ব্যবহার করে। আপনি অভিনব হলে আপনি এটির আরও কিছু পরীক্ষা করে দেখতে পারেন ।


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

1
এটি ওপি প্রশ্নের উত্তর দেয় না। ওপি মাইএসকিউএল ফর্ম্যাট থেকে একটি তারিখ নিতে এবং মিমি / ডিডি / ইয়াই এইচ: এম (এএম / এএম) রূপান্তর করতে চায় । এটি বিপরীতটি করে। প্লাস এটি ডাটাবেসের পরিবর্তে কোনও ফর্ম থেকে ইনপুট নেয়।
toxalot
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.