স্ট্রোটোটাইম () ডিডি / মিমি / ওয়াইওয়াইওয়াই ফর্ম্যাটের সাথে কাজ করে না


167

আমি strtotime()ফাংশনটি সত্যিই পছন্দ করি তবে ব্যবহারকারীর ম্যানুয়ালটি সমর্থিত তারিখের ফর্ম্যাটগুলির সম্পূর্ণ বিবরণ দেয় না। strtotime('dd/mm/YYYY')কাজ করে না, এটি কেবল mm/dd/YYYYবিন্যাসের সাথে কাজ করে।

আমার যদি dd/mm/YYYYফর্ম্যাটে তারিখ থাকে তবে আমি কীভাবে এটিকে রূপান্তর করতে পারি YYYY-mm-dd? আমি এটি explode()ফাংশন ব্যবহার করে করতে পারি , তবে আমি মনে করি এর থেকে আরও ভাল সমাধান রয়েছে।


7
এটিকে বিশ্লেষণের জন্য আপনাকে এটিকে "YYYY-mm-dd" ফর্ম্যাটে রূপান্তর করতে হবে না - আপনাকে কেবল এটি "dd-mm-YYYY" রূপান্তর করতে হবে, যা দিয়ে করা যেতে পারেstr_replace('/', '-', $date);
গ্যাভিন কোটস

উত্তর:


399

এখানে সরলিকৃত সমাধান:

$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));

ফলাফল:

2010-05-25

strtotimeডকুমেন্টেশন লেখা আছে:

মি / ডি / ওয়াই বা ডিএমআই ফর্ম্যাটগুলির তারিখগুলি বিভিন্ন উপাদানগুলির মধ্যে বিভাজকটি দেখে দ্ব্যর্থহীন: যদি বিভাজকটি স্ল্যাশ হয় ( / ), তবে আমেরিকান এম / ডি / ওয়াই ধরে নেওয়া হয়; যদিও বিভাজকটি যদি কোনও ড্যাশ ( - ) বা ডট ( ) হয় তবে ইউরোপীয় ডিএমআই ফর্ম্যাটটি ধরে নেওয়া হবে।


2
@ ওয়েব লজিক আমি স্ট্রোটোটাইম () ফাংশনের ডিফল্ট ফর্ম্যাটটিকে অনুধাবন করতে পারি না, যদি আমি স্ট্রোটোটিমার ('01 -01-2010 ') লিখি তবে এটি এটিকে ডিডি-মিমি-ওয়াইওয়াই বা মিমি-ডিডি-ওয়াইওয়াই ফর্ম্যাট হিসাবে বুঝতে পারে?
সাইমন

3
যদি আপনি এটি দিয়ে পরীক্ষা করেন: echo date('Y-m-l', strtotime('01-01-2010'));ফলাফল হয় 2010-01-Friday। সুতরাং দিন শেষে আসছে, আপনি কীভাবে কার্যটির তারিখের ফর্ম্যাটটি নির্দিষ্ট করেন তার উপর নির্ভর করে date

1
আপনি এখানে যা পোস্ট করেছেন তা সঠিক এবং ব্যবহারকারীদের প্রশ্নের জবাব দিয়েছে - এটি আসল সমস্যাটি সমাধানের একটি চক্রাকার উপায়। স্ট্রোটাইম () এর জন্য "dd / মিমি / yy" ফর্ম্যাটে একটি তারিখ সঠিকভাবে পার্স করার জন্য, আপনাকে "/" এর সাথে "-" প্রতিস্থাপন করতে হবে। অতএব আপনার উত্তরটির প্রথম দুটি লাইনই সত্যই প্রয়োজন: $date = '25/05/2010'; $date = str_replace('/', '-', $date); আপনার সমস্যা সমাধানের জন্য অতিরিক্ত লাইন প্রয়োজন হয় না।
গ্যাভিন কোট

এটি কেবলমাত্র যদি দিনটি 12>: $ তারিখ = '1/2/34' হয় তবে সঠিক; // প্রথম ফেব্রুয়ারী 2034 প্রতিধ্বনি তারিখ ('d এম ওয়াই', স্ট্রোটোটাইম ($ তারিখ)); // 02 জানুয়ার 2034
কুর্ডপেজ

ধন্যবাদ বন্ধু. সত্যিই আমার দিন তৈরি।
BEingprabhU

64

আপনি ডেটটাইম :: ক্রিয়েটফর্মফর্ম্যাট সহ একটি কাস্টম ফর্ম্যাট (পিএইচপি 5.3 হিসাবে) থেকে তারিখগুলি পার্স করতে পারেন

$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();

(একদিকে: !ইউনিক্স টাইমস্ট্যাম্পে অ-নির্দিষ্ট মানগুলি পুনরায় সেট করতে ব্যবহৃত হয়, অর্থাত সময়টি মধ্যরাত হবে।)


আপনি করতে চাই না (অথবা করা যাবে না) পিএইচপি 5.3, তারপর যা strtotime স্বীকার তালিকাভুক্ত পাওয়া তারিখ / সময় বিন্যাসের একটি সম্পূর্ণ তালিকা ব্যবহার করেন তাহলে তারিখ ফর্ম্যাট ম্যানুয়াল পাতা। যে পেজটি আরো পুঙ্খানুপুঙ্খভাবে যে বর্ণনা m/d/Yউপর অনুমিত হয় d/m/Y(কিন্তু আপনি যা করতে পারেন,, ব্যবহার এখানে উত্তর হিসাবে উল্লেখ করেছে d-m-Y, d.m.Yবা d\tm\tY)।


অতীতে, আমি str_replaceঅন্য উত্তরে উল্লিখিত দ্রুততার সাথেও আশ্রয় নিয়েছি , পাশাপাশি তারিখের স্ট্রিংকে অন্য বিন্যাসে স্ব-অংশীকরণ করার মতো করেছি

$subject   = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);

17

এটি অনেক সমস্যার একটি ভাল সমাধান:

function datetotime ($date, $format = 'YYYY-MM-DD') {

    if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
    if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
    if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);

    if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
    if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
    if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);

    if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
    if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
    if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);

    return mktime(0, 0, 0, $month, $day, $year);

}

16

স্ট্রোটট টাইম রাইটআপ নোট থেকে:

মি / ডি / ওয়াই বা ডিএমআই ফর্ম্যাটগুলির তারিখগুলি বিভিন্ন উপাদানগুলির মধ্যে বিভাজকটি দেখে দ্ব্যর্থহীন: যদি বিভাজকটি স্ল্যাশ হয় (/), তবে আমেরিকান এম / ডি / ওয়াই ধরে নেওয়া হয়; যদিও বিভাজকটি যদি কোনও ড্যাশ (-) বা ডট (।) হয় তবে ইউরোপীয় ডিএমআই ফর্ম্যাটটি ধরে নেওয়া হবে।

এটা যে হিসাবে হিসাবে সহজ।


আমরা এটি প্রয়োগ করতে পারি যেহেতু তারা ত্রুটি দেয় না তবে যখন আমি পরীক্ষা করে দেখি $tএবং $t1বিভিন্ন ফলাফল দেখায়। আমি এই মত চেক। $t=strtotime(date('d-m-Y'));এবং $t1=strtotime(date('m/d/Y'));
Vusan

3

দ্রুততম হওয়া উচিত

false!== ($date !== $date=preg_replace(';[0-2]{2}/[0-2]{2}/[0-2]{2};','$3-$2-$1',$date))

যদি ফর্ম্যাটটি যথাযথ মতো না দেখায় তবে এটি মিথ্যা হবে


2

এর থেকে ভাল সমাধান আমি খুঁজে পাইনি। আপনি ব্যবহার করতে পারেন explode(), preg_match_all()ইত্যাদি

আমার মতো এই স্ট্যাটিক সহায়ক ফাংশন আছে

class Date {

    public static function ausStrToTime($str) {
        $dateTokens = explode('/', $str);
        return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]); 

    }

}

এর জন্য সম্ভবত আরও ভাল নাম আছে তবে আমি ব্যবহার করি ausStrToTime()কারণ এটি অস্ট্রেলিয়ান তারিখগুলির সাথে কাজ করে (যা আমি প্রায়শই অস্ট্রেলিয়ান হয়ে থাকি)। আরও ভাল নাম সম্ভবত মানক নাম হবে, তবে আমি নিশ্চিত না যে এটি কী।


2

আমি ddmmyy ফর্ম্যাটটি ফর্ম্যাটে রূপান্তরিত করার চেষ্টা করেছি date("Y-m-d"কিন্তু আমি সরাসরি পাস করার সময় কাজ করছিলাম নাddmmyy =date('dmy')

তারপরে বুঝতে পেরেছিলাম এটি তাই ymmy-mm-dd ফর্ম্যাটে থাকতে হবে। সংগঠিত করতে স্ট্রিং ব্যবহৃত হয়

$strParam = '20'.substr($_GET['date'], 4, 2).'-'.substr($_GET['date'], 2, 2).'-'.substr($_GET['date'], 0, 2);  

তারপর পাস date("Y-m-d",strtotime($strParam));

এটা কাজ করেছে!


2

$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');

এটি আপনার পক্ষে কাজ করবে। আপনি স্ট্রিংকে একটি কাস্টম ডেট ফর্ম্যাটে রূপান্তর করেন যেখানে আপনি এইচআরপি নির্দিষ্ট করতে পারেন যে স্ট্রিংয়ের মূল ফর্ম্যাটটি এটি দেওয়া হয়েছিল। এখন এটি একটি তারিখের ফর্ম্যাট, আপনি এটি পিএইচপি-র ডিফল্ট তারিখের ফর্ম্যাটে রূপান্তর করতে পারেন যা মাইএসকিউএল দ্বারা ব্যবহৃত হয়।


সবচেয়ে শুদ্ধ এবং সর্বোত্তম সমাধান
মার্কো

1

আপনি একটি ডাটাবেস থেকে এই মান পাচ্ছেন? যদি তা হয় তবে এটি ডাটাবেসে ফর্ম্যাট করার বিষয়টি বিবেচনা করুন ( date_formatউদাহরণস্বরূপ মাইএসকিএল-এ ব্যবহার করুন )। যদি তা না হয় তবে মানটি বিস্ফোরক করা সেরা বেট হতে পারে, যেহেতু স্ট্রোটোটাইম কেবল ডিডি / মিমি / ইয়াই মানগুলি প্রশংসা করে না।


1

আপনি যদি এটি ডিডি / মিমি / ওয়াইওয়াইওয়াইতে জানেন তবে আপনি এটি করতে পারেন:

    $regex = '#([/d]{1,2})/([/d]{1,2})/([/d]{2,4})#';
    $match = array();
    if (preg_match($regex, $date, $match)) {
        if (strlen($match[3]) == 2) {
            $match[3] = '20' . $match[3];
        }
        return mktime(0, 0, 0, $match[2], $match[1], $match[3]);
    }
    return strtotime($date);

এটি তারিখগুলি ডি / এম / ওয়াইওয়াই বা ডিডি / মিমি / ওয়াইওয়াইওয়াই (বা দুজনের কোনও সংমিশ্রণ) আকারে মিলবে ...

আপনি যদি কেবল / এর চেয়ে বেশি বিভাজককে সমর্থন করতে চান তবে আপনি রেজেক্সকে এতে পরিবর্তন করতে পারেন:

    $regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';

এবং তারপরে আপনার যে কোনও অক্ষর [/-]বিটটিতে যুক্ত করুন (দ্রষ্টব্য, - অক্ষরটি শেষ হওয়া দরকার)


নিশ্চয় তোমাদের Regex ব্যবহার হওয়া উচিত \dদশমিক সংখ্যা জন্য বদলে [/d]জন্য এগিয়ে-স্ল্যাশ বা ঘ চরিত্র
সালাতে

1

এই workaround বিস্ফোরণ চেয়ে সহজ এবং আরও মার্জিত:

$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);

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


0

সহজ সমাধানটি হ'ল:

$date    = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));

3
এটা ভুল. প্রশ্নটি স্পষ্টভাবে ডিডি / মিমি / ইয়ে ইনপুটগুলির সাথে সম্পর্কিত।
ম্যাট ফ্লেচার

0

এই সমাধানটি আমি ব্যবহার করছি এমনকি যদি প্রথম শূন্য থাকে।

<?php
 $date = '05/05/2017';
 $date = str_replace('/', '-', $date);
 $date = date('Y-m-d', strtotime($date));

 echo $date;
?>

0

$ তারিখ_ইনফো = '20 / 02/2019 '; প্রতিধ্বনি তারিখ ('Ym-d', strtotime (str_replace ('/', '-', $ তারিখ_ইনফো)));


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