মাইএসকিউএলে ডেটটাইম সন্নিবেশ করানোর সময় পিএইচপি তারিখ () ফর্ম্যাট


324

date()যদি আমি কোনও মাইএসকিউএল datetimeটাইপ কলামে ফলাফল toোকাতে চাই তবে পিএইচপি-তে ফাংশনে যাওয়ার সঠিক বিন্যাসটি কী ?

আমি চেষ্টা করে যাচ্ছিলাম date("Y-M-D G:i:s")তবে কেবলমাত্র "0000-00-00 00:00:00" প্রতিবার .োকানো হয়।


3
যেহেতু আপনি আজ পর্যন্ত কোনও প্যারামিটার সরবরাহ করছেন না আপনি কি প্রকৃতপক্ষে বর্তমান সময়টি রেকর্ড করতে চান?
মার্ক ইলিয়ট

উত্তর:


680

সমস্যাটি হ'ল আপনি ব্যবহার করছেন 'M'এবং 'D', যা একটি পাঠ্য উপস্থাপনা, মাইএসকিউএল ফর্ম্যাটটির একটি সংখ্যক উপস্থাপনা আশা করছে2010-02-06 19:30:13

চেষ্টা করুন: date("Y-m-d H:i:s")যা সংখ্যার সমতুল্য ব্যবহার করে।

সম্পাদনা: এতে স্যুইচ করা Gহয়েছে H, যদিও এর প্রভাব নাও থাকতে পারে, আপনি সম্ভবত শীর্ষস্থানীয় 0 টি সহ 24 ঘন্টা বিন্যাসটি ব্যবহার করতে চান।


28
এটি যে কোনও ব্যক্তির প্রয়োজন হবে এমন একক সাধারণ ডেটটাইম ফর্ম্যাটগুলির মধ্যে একটি হতে হবে be পিএইচপি গ্লোবাল বা খেজুর ফাংশনের অংশে নিজেই একটি বিল্ট হওয়া উচিত (যেমন, 'সি', 'আর')
বিলিএনও

33
কেন এই ঘটনা আমি জানি না। আমি প্রতি স্ট্যাক ওভারফ্লো উল্লেখ করতে হবে। একক। কাজ। সময়।
Mazatec,

11
এই জাতীয় ব্যবহারের জন্য আমার কোডে অনুসন্ধানের চেয়ে এখানে আসা আরও দ্রুত।
এমআরড্রিগস

64
এই ফর্ম্যাটটি মনে রাখার জন্য কেবল একটি সুন্দর স্মৃতিচেতনার কথা ভেবেছিলেন: " Y আমাদের m y d তাঁর নয় ।"
এতগুলি

2
আইএসও 8601 এবং আরএফসি 2822
বিলিএনঃ

105

পিএইচপি এর date()ম্যানুয়াল পৃষ্ঠার মন্তব্যগুলি থেকে :

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

আপনার 'ওয়াই' সঠিক ছিল - এটি পুরো বছর, তবে 'এম' একটি তিনটি অক্ষরের মাস, যখন 'এম' একটি দুই অঙ্কের মাস। 'ডি' এর পরিবর্তে 'ডি' দিয়ে একই সমস্যা। 'জি' হল 1 বা 2 ডিজিটের ঘন্টা, যেখানে 'এইচ' এর দরকার হয় যখন সর্বদা 0 থাকে।


1
ধন্যবাদ @ পেক্কা - আমার মনে আছে যখন আপনি এবং আমার প্রায় একই প্রতিনিধি ছিল - আপনি বেশ সক্রিয় ছিলেন।
টিম লিটল

1
হ্যাঁ, আমি এই মুহুর্তে অনেক বেশি কাজ করছি এবং এর মধ্যে আমার খুব মনোরম বিনোদন :) এটি আবার পরিবর্তিত হবে।
পেক্কা

41

এখানে একটি বিকল্প সমাধান রয়েছে: যদি আপনার পিএইচপি-তে তারিখটি টাইমস্ট্যাম্প হিসাবে থাকে, পিএইচপি দিয়ে এটি পরিচালনা করে বাইপাস করুন এবং ডিবিটিকে 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 |
+---------------------+

এটি একটি মার্জিত সমাধান
T ধন্যবাদ

2
@ ট্রেজেদার, কে আপনাকে বলেছিল যে পিএসএইচপি করার চেয়ে মাইএসকিএল করে করা দ্রুত? পিএইচপিতে এটি করা আরও ভাল কারণ ডিবি সাধারণত বাধা হয়ে থাকে এবং আপনি এ্যাসপ এবং আউটপুট পেতে চান ।
পেসারিয়ার

1
@ পেসারিয়ার ডিবি হ'ল বাধা হ'ল যদি আপনার খুব খারাপভাবে নির্মিত ডিবি থাকে, বা আরও শক্তিশালী কার্যকর একক ক্যোয়ারির পরিবর্তে অনেকগুলি ছোট প্রশ্ন চালানো হয়, বা আপনি যদি ডাটাবেস পরিচালনা করতে কোনও ওআরএম এর উপর নির্ভর করেন তবে অনেক ক্ষেত্রে। ভাল ইনডেক্সড রিলেশনাল ডাটাবেস সহ সলিড এসকিউএল ধীর নয়।
মপসাইড

2
@ মোপসাইড, ডিবি হ'ল বাধা কারণ কারণ এটি অনুভূমিকভাবে স্কেলিং করা জটিলতার প্রয়োজন। কোনও কোড পরিবর্তন ছাড়াই বিশ্বব্যাপী ডুপ্লিকেট করা যেতে পারে এমন ওয়েবসারগুলির সাথে এর তুলনা করুন।
পেসারিয়ার

1
যদি কোয়েরিটি ব্যর্থ হয়, কোথাও লগ হয়েছে এবং আপনাকে এটি ডিবাগ করতে হবে, তবে টাইমস্ট্যাম্পটি @ টিম-লাইটেল দ্বারা বর্ণিত ফর্ম্যাট তারিখের স্ট্রিংয়ের চেয়ে পড়া আরও শক্ত is
হামবুডস

27

আমি একটি মাইএসকিউএল ডেটটাইম কলামে sertোকানো একটি পরিবর্তনশীল তৈরি করতে নীচের পিএইচপি কোডটি ব্যবহার করি।

$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

পিএইচপি সহ মাইএসকিউএল ডেটটাইম ফর্ম্যাট করুন

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

8

আমি এই ফাংশনটি ব্যবহার করি (পিএইচপি 7)

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

পিএইচপি (পিএইচপি <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 টি স্ট্রিংয়ের একটি উদাহরণ হতে হবে, স্ট্রিং দেওয়া আছে" - আমার ইনপুটটি একটি স্ট্রিং ছিল
ক্রিস পিঙ্ক

7

যদি আপনি টাইমস্ট্যাম্প ব্যবহার না করেন তবে পিএইচপি থেকে তারিখ () পদ্ধতি ব্যবহার করার দরকার নেই। যদি datepostedএকটি ডেটটাইম কলাম হয় তবে আপনি বর্তমান তারিখটি এভাবে সন্নিবেশ করতে পারেন:

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

2
এই পদ্ধতির ভাগ করে নেওয়ার জন্য ধন্যবাদ। এটি এখন পর্যন্ত আমি সবচেয়ে সহজ পদ্ধতিটি দেখেছি।
Shondeslitch

2

এটি একটি সরল উত্তরের জন্য আমাকে উন্মাদ করে চলেছে। অবশেষে আমি এই ফাংশনটি তৈরি করেছি যা দেখে মনে হয় যে সমস্ত ইনপুট ধরা পড়ে এবং একটি ভাল এসকিউএল স্ট্রিং দেয় যা সঠিক বা কমপক্ষে বৈধ এবং চেকযোগ্য। এটি যদি 1999-12-31 হয় তবে এটি সম্ভবত ভুল তবে মাইএসকিউএলে কোনও খারাপ ত্রুটি ফেলবে না।

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

DateTimeপিএইচপি 7 + এ শ্রেণি ব্যবহার করা :

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")

অথবা, যদি আপনি মাইএসকিউএলকে সমস্ত কিছু পরিচালনা করতে পছন্দ করেন তবে কিছু উত্তরের সূত্র অনুসারে, আমি UTC_TIMESTAMPএকই ফলাফলের সাথে মাইএসকিউএল সন্নিবেশ করবো ।

দ্রষ্টব্য: আমি বর্তমান সময়ের উল্লেখ করে প্রশ্নটি বুঝতে পেরেছি।


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