পিএইচপি-তে মাসের নামতে নম্বর রূপান্তর করুন


152

আমার এই পিএইচপি কোড রয়েছে:

$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));

echo $monthName;

তবে এটি ফিরে আসার Decemberবদলে August

$result["month"]8 এর সমান, সুতরাং এটির জন্য sprintfফাংশনটি যুক্ত 0করছে 08


6
আপনি যদি এটিকে পুরো তারিখ (08-21-2013) এ রূপান্তর না করেন বা তারিখের সাথে সাদৃশ্যযুক্ত এমন কিছু strtotimeআপনার কী করার চেষ্টা করে তবে তা ধারণা নেই। বিকল্পভাবে এই জাতীয় কিছু জন্য একটি স্যুইচ ব্যবহার করুন।
phpisuber01

দুঃখিত - $ ফলাফল ["মাস"] 8 হ'ল কারণ আমার কাছে একটি এসকিউএল ক্যোয়ারী রয়েছে যা বলেছেন যে টেবিল থেকে MONTH (তারিখের সময়) নির্বাচন করুন ... সুতরাং সারণীতে এটির একটি সম্পূর্ণ তারিখের ফর্ম্যাট
ব্যবহারকারী 2710234

1
কিন্তু strtotimeকি কোন ধারণা "8" মাধ্যম রয়েছে। strtotime"2012-05-12 08:43:12" এর মতো সম্পূর্ণ টাইমস্ট্যাম্পগুলি পার্স করে। এই প্রসঙ্গে "8" এর অর্থ কী?
ছদ্মবেশ

কেন শুধু: echo date( "F", time() );? উদাহরণস্বরূপ, echo date( "F", strtotime("2019-03-09") );"মার্চ" আউটপুট দেবে
রব ওয়াটস

উত্তর:


357

এটি করার প্রস্তাবিত উপায়:

আজকাল, আপনার কোনও তারিখ / সময় গণিতের জন্য ডেটটাইম অবজেক্টগুলি ব্যবহার করা উচিত। এর জন্য আপনার একটি পিএইচপি সংস্করণ> = 5.2 থাকা দরকার। গ্লাভির উত্তরে প্রদর্শিত হিসাবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

$monthNum  = 3;
$dateObj   = DateTime::createFromFormat('!m', $monthNum);
$monthName = $dateObj->format('F'); // March

!বিন্যাস চরিত্র সবকিছু রিসেট করতে ব্যবহৃত হয় ইউনিক্স যুগান্তকারীmবিন্যাস চরিত্র একটি মাসের সাংখ্যিক উপস্থাপনা, নেতৃস্থানীয় শূণ্যসমূহ সাথে।

বিকল্প সমাধান:

আপনি যদি কোনও পুরানো পিএইচপি সংস্করণ ব্যবহার করছেন এবং এই মুহুর্তে আপগ্রেড করতে না পারেন তবে আপনি এই সমাধানটি করতে পারেন। date()ফাংশনের দ্বিতীয় প্যারামিটার একটি টাইমস্ট্যাম্প গ্রহণ করে এবং আপনি এটির mktime()মতো তৈরি করতে ব্যবহার করতে পারেন:

$monthNum  = 3;
$monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March

আপনি যদি 3-অক্ষরের মাসের নামটি পছন্দ করতে চান তবে Marপরিবর্তন Fকরুন M। সমস্ত উপলভ্য বিন্যাস বিকল্পগুলির তালিকা পিএইচপি ম্যানুয়াল ডকুমেন্টেশনে পাওয়া যাবে ।


36
এটি LC_TIME লোকালকে সম্মান করে না এবং সর্বদা ইংরেজিতে মাসের নাম আউটপুট করে।
ডেরিকসন

2
আমি এটিকে কখনও দেখিনি - মারাত্মক ত্রুটি: নূনে নন-অবজেক্টে সদস্য ফাংশন ফর্ম্যাটটিতে কল করুন () 48 টি প্লাসের এটি নেই?
জারোস্লাভ reত্রেইট

1
আপনি কেন বলেন যে আমাদের "সত্যই" এর জন্য ডেটটাইম অবজেক্ট ব্যবহার করা উচিত? ডেটটাইম অবজেক্টগুলি দরকারী, তবে তারিখ () ফাংশনটি অনেক সহজ হ'ল ওভারহেডের চেয়ে অনেক কম (গতি এবং মেমরি উভয় ক্ষেত্রে) যদি আপনি যা করার চেষ্টা করছেন সমস্ত কিছু যদি এর মতো সহজ হয়।
অর্ড

4
@ অর্ড: যদি তারিখ () এবং ডেটটাইম এর মধ্যে গতির পার্থক্যটি আপনি যে অ্যাপ্লিকেশনটি তৈরি করছেন তার মধ্যে যদি বাধা হয়ে দাঁড়ায় তবে আমি বলতে পারি যে আপনার চিন্তার বড় সমস্যা রয়েছে। প্রকৃত অ্যাপ্লিকেশনগুলির জন্য, যেখানে আপনাকে অনিবার্যভাবে তারিখগুলি সহ অন্যান্য জিনিসগুলি করার প্রয়োজন হয়, তবে এটি কোনও আইটেমে থাকায় এটি উচ্চতর হিসাবে এটি এপিআই পড়তে সহজ হয়।
অমল মুরালি

1
@ অর্ড: কিন্ডা কেবলমাত্র ডেটটাইমকে একটি ডাউনওয়োটের পরামর্শ দেওয়ার জন্য বিস্মিত হয়েছিল: পি ডিআরওয়াইয়ের
অমল মুরালি

42

শুধু কারণ সবাই strtotime () এবং তারিখ ব্যবহার () ফাংশন, আমি দেখাব তারিখসময় উদাহরণ:

$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');

পর্যায়ক্রমে, আপনি DateTime::createFromFormat('m|', $result['month']);কেবল অনুপস্থিত ক্ষেত্রগুলি পুনরায় সেট করতে ব্যবহার করতে পারেন ।
14

এই সমাধানটি ব্যবহার করে কী ভাষা পরিবর্তন করার কোনও উপায় আছে?
মিশেল আইরেস

@ মিশেল আইরেস: না আপনি এটি ব্যবহার করতে হবে strftime()
অমল মুরালি

30

ব্যবহার mktime():

<?php
 $monthNum = 5;
 $monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
 echo $monthName; // Output: May
?>

পিএইচপি ম্যানুয়াল দেখুন: http://php.net/mktime


মাসের নাম পাস করার পরে মাসের নম্বর পাওয়ার কোনও উপায় আছে কি?
নিশা

@ নিশা প্যারামিটার ব্যবহার করে "m"এটি মাস হিসাবে 2 অঙ্কের সংখ্যা হিসাবে ফিরে আসবে string। যেমন জানুয়ারী = 01, ফেব্রুয়ারি = 02
জ্যাক

18

strtotime একটি মানিক তারিখের ফর্ম্যাটটি প্রত্যাশা করে এবং একটি টাইমস্ট্যাম্প পিছনে যায়।

মনে হচ্ছে আপনি strtotimeকোনও তারিখের ফর্ম্যাট আউটপুট দেওয়ার জন্য একটি একক সংখ্যা অতিক্রম করছেন ।

আপনার ব্যবহার করা উচিত mktimeযা তারিখের উপাদানগুলিকে পরামিতি হিসাবে গ্রহণ করে।

আপনার সম্পূর্ণ কোড:

$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", mktime(null, null, null, $monthNum));

echo $monthName;

তবে, এমকিটাইম ফাংশনটির জন্য মাসের সংখ্যার শীর্ষস্থানীয় শূন্যের প্রয়োজন হয় না, তাই প্রথম লাইনটি সম্পূর্ণ অপ্রয়োজনীয় এবং $result["month"]সরাসরি ফাংশনে প্রবেশ করা যায়।

এটির পরে তারিখের ইনলাইনটি প্রতিধ্বনিত করে সমস্ত একক লাইনে একত্রিত করা যায়।

আপনার রিফ্যাক্টর কোড:

echo date("F", mktime(null, null, null, $result["month"], 1));

...


অদ্ভুতভাবে পরিবর্তে date("F", mktime(null, null, null, 2));ফিরে । MarchFebruary
মিশা

4
ভাল করে খেয়াল করলেন, @ মিশা। আপনি যদি কোনও দিন নির্ধারণ না করেন (5 ম প্যারামিটার), mktimeবর্তমান দিনটি ব্যবহার করবে। আজ 31 তম। 31 শে ফেব্রুয়ারি কি? :)
গ্রেগ

আপনার রিফ্যাক্টর কোডটিতে একটি ত্রুটি রয়েছে। 15 ম পরামিতি হিসাবে সরবরাহ করা হচ্ছে না তবে mktimeতৃতীয় প্যারামিটার হিসাবে dateযা প্রত্যাশিত ফলাফল আনবে না
এজাজ

18

বর্তমান লোকেলের ক্ষেত্রে রূপান্তরটি করতে, আপনি এই strftimeফাংশনটি ব্যবহার করতে পারেন :

setlocale(LC_TIME, 'fr_FR.UTF-8');                                              
$monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));

dateলোকেলকে সম্মান করে না, strftimeকরে।


ধন্যবাদ, সুন্দর কাজ করছি! যাইহোক, আমাকে $monthName = utf8_encode(strftime('%B', mktime(0, 0, 0, $monthNumber)));'অওট'
রবিবি

2
@ রৌবি যেমন utf8_encode হিসাবে "UTF-8 তে একটি ISO-8859-1 স্ট্রিং এনকোডগুলি" হিসাবে নথিভুক্ত হয়েছে, এর অর্থ আপনার û একটি ISO-8859-1 ছিল। আপনি যদি সর্বত্র ইউটিএফ -8 চান (এবং আপনার পিএইচপি কোডটি ইউটিএফ -8 এ ডিফল্টরূপে চালিত হয় না), আপনি সেটলোকলে এলসি_টাইমের পরিবর্তে এলসি_এলএল ব্যবহার করতে পারেন।
ডেরিকসন

6

আপনি যদি বছরের শুরু থেকে শেষের দিকে যেমন মাসের নামের একটি অ্যারে চান, যেমন একটি ড্রপ-ডাউন নির্বাচনকে জনপ্রিয় করতে, আমি কেবল নিম্নলিখিতটি ব্যবহার করব;

for ($i = 0; $i < 12; ++$i) {
  $months[$m] = $m = date("F", strtotime("January +$i months"));
}

6

প্রদত্ত নম্বর থেকে এক মাস মুদ্রণের অনেকগুলি উপায় রয়েছে। আপনার জন্য একটি স্যুট বাছুন।

1. প্যারামিটার 'এফ' সহ তারিখ () ফাংশন

কোড উদাহরণ:

$month_num = 10;
echo date("F", mktime(0, 0, 0, $month_num, 10)); //output: October

২. পিএইচপি তারিখ অবজেক্ট তৈরি করে ক্রমফরম্যাট () ব্যবহার করে

কোড উদাহরণ

$dateObj   = DateTime::createFromFormat('!m', $monthNum);
echo "month name: ".$dateObj->format('F'); // Output: October

3. স্ট্রোটোটাইম () ফাংশন

echo date("F", strtotime('00-'.$monthNum.'-01')); // Output: October

4. এমকিটাইম () ফাংশন

echo date("F", mktime(null, null, null, $monthNum)); // Output: October

৫. jdmonthname () ব্যবহার করে

$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct

4

প্রয়োজন অনুসারে অভিযোজিত

$m='08';
$months = array (1=>'Jan',2=>'Feb',3=>'Mar',4=>'Apr',5=>'May',6=>'Jun',7=>'Jul',8=>'Aug',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dec');
echo $months[(int)$m];

1
সহজ এবং বিন্দুতে অপ্রয়োজনীয় তারিখ রূপান্তর ছাড়াই।
মার্টি

4

আপনার যদি মাসের নম্বর থাকে তবে আপনি প্রথমে এটির থেকে 1 তম ডিফল্ট তারিখ এবং চলতি বছরের ডিফল্ট বছরের সাথে একটি তারিখ তৈরি করতে পারেন, তারপরে তৈরি তারিখ থেকে মাসের নামটি বের করুন:

echo date("F", strtotime(date("Y") ."-". $i ."-01"))

এই কোডটি ধরে নেওয়া আপনার নিজের মাসের নম্বরটি month i এ সঞ্চিত আছে

আশা করি এটি কাউকে সাহায্য করবে



2

এটি তুচ্ছ সহজ, কেন এত লোক এত খারাপ পরামর্শ দিচ্ছেন? @ বোরা সবচেয়ে কাছের ছিল, তবে এটি সবচেয়ে শক্তিশালী

/***
 * returns the month in words for a given month number
 */
date("F", strtotime(date("Y")."-".$month."-01"));

এই এটা করতে হয়


2

একই সমস্যা মোকাবেলায় বর্তমানে নীচের সমাধানটি ব্যবহার করছি:

//set locale, 
setlocale(LC_ALL,"US");

//set the date to be converted
$date = '2016-08-07';

//convert date to month name
$month_name =  ucfirst(strftime("%B", strtotime($date)));

echo $month_name;

সেট লোকেলে সম্পর্কে আরও পড়তে http://php.net/manual/en/function.setlocale.php এ যান

আরআরএফটাইম সম্পর্কে আরও জানতে http://php.net/manual/en/function.strftime.php এ যান

Ucfirst() একটি অক্ষরে প্রথম অক্ষরকে মূলধন করতে ব্যবহৃত হয়।


utf8 চেষ্টা করে একটি সামঞ্জস্যের জন্য: utf8_encode (ucfirst (strftime ("% B", স্ট্রোটোটাইম ($ তারিখ)))));
মিমোনি

1
@ মিমৌনি এটি প্রয়োজনীয় নয় যেমন utf8_encode ফাংশনটি আইএসও -8859-1 স্ট্রিংগুলিকে ইউটিএফ -8 এ রূপান্তর করে, তবে এলসি_এলএল এর মাধ্যমে কোডটি ইউটিএফ -8 আউটপুট দেওয়ার নির্দেশ দেওয়া যেতে পারে, উদাহরণস্বরূপ যদি আপনি পরিবর্তে en_US.UTF-8 ব্যবহার করেন আমাদের.
ডেরিকসন


1

আপনার সাথে strtotimeবা ক্ষেত্রগুলি সেট করতে হবেmktime

echo date("F", strtotime('00-'.$result["month"].'-01'));

mktimeসেট সঙ্গে শুধুমাত্র মাস। আর একবার চেষ্টা কর:

echo date("F", mktime(0, 0, 0, $result["month"], 1));


1

তারিখ-সময় রূপান্তরকরণের সমস্ত প্রয়োজনের জন্য এটি

 <?php
 $newDate = new DateTime('2019-03-27 03:41:41');
 echo $newDate->format('M d, Y, h:i:s a');
 ?>


0

আমি মনে করি Cal_info () ব্যবহার করা সংখ্যা থেকে স্ট্রিংয়ে রূপান্তরিত করার সহজতম উপায়।

$monthNum = sprintf("%02s", $result["month"]); //Returns `08`
$monthName = cal_info(0); //Returns Gregorian (Western) calendar array
$monthName = $monthName[months][$monthNum];

echo $monthName; //Returns "August"

Cal_info () এর জন্য দস্তাবেজগুলি দেখুন



0

আমি জানি এই প্রশ্নটি এখনই বেশ কিছুক্ষণ আগে জিজ্ঞাসা করা হয়েছিল, তবে আমি বুঝতে পেরেছিলাম যে এই উত্তরটির সন্ধানকারী সবাই সম্ভবত / / অন্য বিবৃতিগুলি সম্পূর্ণ লেখার বিষয়টি এড়িয়ে যাওয়ার চেষ্টা করছেন, তাই আমি এটি আপনার জন্য লিখেছিলাম যাতে আপনি অনুলিপি / পেস্ট করতে পারেন। এই ফাংশনটির সাথে একমাত্র সতর্কতা হ'ল এটি মাসের আসল সংখ্যায় চলে যায়, 0-সূচকযুক্ত সংখ্যা নয়, তাই জানুয়ারী = 1, 0 নয়।

function getMonthString($m){
    if($m==1){
        return "January";
    }else if($m==2){
        return "February";
    }else if($m==3){
        return "March";
    }else if($m==4){
        return "April";
    }else if($m==5){
        return "May";
    }else if($m==6){
        return "June";
    }else if($m==7){
        return "July";
    }else if($m==8){
        return "August";
    }else if($m==9){
        return "September";
    }else if($m==10){
        return "October";
    }else if($m==11){
        return "November";
    }else if($m==12){
        return "December";
    }
}

4
আপনি স্যুইচ / কেস ব্যবহার করেননি কেন?
আর্টজম বি

আমি অনুমান করতে পারি, ব্যক্তিগত পছন্দটি বেশিরভাগ ক্ষেত্রেই, আমি / অন্যটি পড়তে সহজ কিনা তা খুঁজে পাই এবং কেবল 12 টি বিকল্পের সাথে, গতির যে কোনও পার্থক্য উপেক্ষণীয় হবে।
অদ্ভুত কচ্ছপ

আপনার যদি বহু ভাষা ভিত্তিক ওয়েবসাইট থাকে তবে এটি কাজ করে না
Crustamet

নাহ তবে আপনি যে আইটেমটি আপনার পছন্দমতো ভাষায় মাস ফিরিয়ে দেন আই 18n ফাংশনগুলি দিয়ে প্রতিস্থাপন করতে পারেন
ফ্রাইকি টার্টল

0

মাসের নম্বর প্রদান করে মাসের নাম পাওয়া get

$ মাস_সংখ্যা = 5;

$ মাসের নাম = তারিখ ('এফ', এমকিটাইম (0, 0, 0, $ মাস_নম্বার, 10));

যেখানে 'এফ' আপনাকে মাসের নাম দিন। 'মে'


0

এইভাবে আমি এটি করেছি

// sets Asia/Calcutta time zone
date_default_timezone_set("Asia/Calcutta");

//fetches current date and time
$date = date("Y-m-d H:i:s");

$dateArray = date_parse_from_format('Y/m/d', $date);
$month = DateTime::createFromFormat('!m', $dateArray['month'])->format('F');
$dateString = $dateArray['day'] . " " . $month  . " " . $dateArray['year'];

echo $dateString;

আয় 30 June 2019


0

এখানে একটি সাধারণ কৌশল আপনি নিজের প্রয়োজন অনুসারে স্ট্রোটোটাইম () ফাংশনটি ব্যবহারযোগ্য, মাসের নামের সাথে রূপান্তর করতে পারেন।

1. আপনি যদি জানু, ফেব্রুয়ারি এবং মার্চে ফলাফল চান তবে তারিখের মধ্যে একটি প্যারামিটার হিসাবে 'এম' দিয়ে নীচে চেষ্টা করুন।

$month=5;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;

আউটপুট: মে

/ 2। আপনি জানুয়ারী ফেব্রুয়ারী মার্চ ইত্যাদি আউটপুট হিসাবে পুরো মাসের নাম পেতে 'এম' এর পরিবর্তে 'এফ' দিয়ে চেষ্টা করতে পারেন etc.

$month=1;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;

আউটপুট: জানুয়ারী



-3

একটি স্থানীয় ফাংশন ব্যবহার করুন যেমন jdmonthname():

echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);

jdmonthname(3, CAL_MONTH_GREGORIAN_LONG);রিটার্নNovember
ওনিমুশা

jdmonthname () জুলিয়ান দিবস প্রত্যাশা করে, যা জ্যোতির্বিদ্যায় ব্যবহৃত দিনের একটি ক্রমবর্ধমান গণনা। দিন 0 ছিল জানুয়ারী 01, 4713 বিসি, প্রথম দিন ছিল জানুয়ারী 02, 4713 বিসি, ইত্যাদি। 20 অক্টোবর, 2014 (গ্রেগরিয়ান তারিখ হিসাবে) জুলিয়ান দিন 2456951 (যা জুলিয়ান তারিখ হিসাবে অক্টোবর 7, 2014) is পিএইচপি আশ্চর্যজনকভাবে 0 জুলিয়ান দিবসটি সঠিকভাবে পরিচালনা করছে বলে মনে হচ্ছে না: প্রতিধ্বনি জেডটোজুলিয়ান (0) "" <br/> "; প্রতিধ্বনিত করুন jdtojulian (1)। "<br/>"; প্রতিধ্বনিত jdtojulian (2)। "<br/>"; প্রত্যাবর্তন: 0/0/0 1/2 / -4713 1/3 / -4713
জর্জ ল্যাংলি

-3

আপনি এসকিউএল এ কেবলমাত্র মাসের নাম () ফাংশন ব্যবহার করতে পারেন।

মাসিকের নাম অনুসারে সারণী গোষ্ঠী থেকে তারিখ নির্বাচন করুন (তারিখ_পথ)


1.) পিএইচপি জিজ্ঞাসা করা হয়েছিল, এসকিউএল নয় 2.) আপনার উত্তরটি মাইএসকিউএল নির্দিষ্ট বলে মনে হচ্ছে, সাধারণ এসকিউএল নয়।
মার্টি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.