PHP में महीने के नाम में संख्या परिवर्तित करें


152

मेरा यह PHP कोड है:

$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 है क्योंकि मेरे पास SQL ​​क्वेरी है जो तालिका से MONTH (तिथि समय) का चयन करती है ... इसलिए तालिका में इसकी पूर्ण तिथि प्रारूप
user2710234

1
लेकिन strtotimeपता नहीं क्या "8" का मतलब है। strtotime"2012-05-12 08:43:12" जैसे पूर्ण टाइमस्टैम्प्स को पार्स करता है। इस संदर्भ में "8" का क्या अर्थ है?
deceze

सिर्फ क्यों नहीं echo date( "F", time() );:? उदाहरण के लिए, echo date( "F", strtotime("2019-03-09") );"मार्च" का उत्पादन करेंगे
रोब वॉट्स

जवाबों:


357

ऐसा करने का अनुशंसित तरीका:

आजकल, आपको वास्तव में किसी भी दिनांक / समय गणित के लिए DateTime वस्तुओं का उपयोग करना चाहिए। इसके लिए आपको PHP संस्करण> = 5.2 होना आवश्यक है। जैसा कि Glavić के उत्तर में दिखाया गया है , आप निम्नलिखित का उपयोग कर सकते हैं:

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

!स्वरूपण चरित्र के लिए सब कुछ रीसेट करने के लिए प्रयोग किया जाता है यूनिक्स कालmप्रारूप चरित्र एक महीने की संख्यात्मक प्रस्तुति, अग्रणी शून्य के साथ है।

दूसरा तरीका:

यदि आप पुराने PHP संस्करण का उपयोग कर रहे हैं और इस समय अपग्रेड नहीं कर सकते हैं, तो आप इसका समाधान कर सकते हैं। date()फ़ंक्शन का दूसरा पैरामीटर टाइमस्टैम्प स्वीकार करता है, और आप mktime()एक बनाने के लिए उपयोग कर सकते हैं , जैसे:

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

यदि आप 3-अक्षर महीने का नाम चाहते हैं Mar, तो बदल Fदें M। सभी उपलब्ध स्वरूपण विकल्पों की सूची PHP मैनुअल प्रलेखन में पाई जा सकती है ।


36
यह LC_TIME लोकेल का सम्मान नहीं करता है और हमेशा अंग्रेजी में महीने का नाम आउटपुट करेगा।
डेरेकसन

2
मैंने इसे एसओ - घातक त्रुटि पर कभी नहीं देखा: 48 प्लस से नोन में एक गैर-ऑब्जेक्ट पर एक सदस्य फ़ंक्शन प्रारूप () पर कॉल करें?
जारोस्लाव ittreit

1
आप ऐसा क्यों कहते हैं कि हम "वास्तव में" इसके लिए डेटटाइम ऑब्जेक्ट्स का उपयोग कर रहे हैं? डेटटाइम ऑब्जेक्ट उपयोगी होते हैं, लेकिन तिथि () फ़ंक्शन बहुत सरल है क्योंकि बहुत कम ओवरहेड (गति और मेमोरी दोनों के संदर्भ में) है, अगर आप ऐसा करने की कोशिश कर रहे हैं तो यह कुछ सरल है।
orrd

4
@orrd: यदि दिनांक () और DateTime के बीच की गति का अंतर आपके द्वारा बनाए जा रहे एप्लिकेशन की अड़चन के रूप में सामने आता है, तो मैं कहूंगा कि आपको चिंता करने के लिए बड़ी समस्याएं हैं। वास्तविक अनुप्रयोगों के लिए, जहाँ आपको अनिवार्य रूप से तारीखों के साथ अन्य काम करने की आवश्यकता होती है, तो यह एक वस्तु में होना बेहतर है क्योंकि एपीआई को पढ़ना आसान है।
अमल मुरली

1
@ जोर: किंडा ने केवल डेटाइम वारंट का सुझाव देते हुए आश्चर्यचकित किया: पी इतना तो डीआरवाई के
अमल मुरली

42

सिर्फ इसलिए कि हर कोई strtotime () और दिनांक () फ़ंक्शन का उपयोग कर रहा है, मैं DateTime उदाहरण दिखाऊंगा :

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

वैकल्पिक रूप से, आप DateTime::createFromFormat('m|', $result['month']);केवल उन फ़ील्ड्स को रीसेट करने के लिए उपयोग कर सकते हैं जो गायब हैं।
21

क्या इस समाधान का उपयोग करके भाषा को बदलने का कोई तरीका है?
मिशेल एयर्स

@ मिचलैरेस: नहीं। उसके लिए आपको उपयोग करना पड़ेगा strftime()
अमल मुरली

30

उपयोग करें mktime():

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

PHP मैनुअल देखें: 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;

हालाँकि, mktime फ़ंक्शन को महीने की संख्या के लिए अग्रणी शून्य की आवश्यकता नहीं है, इसलिए पहली पंक्ति पूरी तरह से अनावश्यक है, और $result["month"] सीधे फ़ंक्शन में पारित की जा सकती है।

इसके बाद दिनांक इनलाइन को प्रतिध्वनित करते हुए सभी को एक लाइन में जोड़ा जा सकता है।

आपका रिफलेक्टेड कोड:

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

...


इसके बजाय अजीब तरह से date("F", mktime(null, null, null, 2));रिटर्न । MarchFebruary
मिशा

4
अच्छी तरह से देखा, @Mischa। यदि आप एक दिन (5 वां पैरामीटर) सेट नहीं करते हैं, mktimeतो वर्तमान दिन का उपयोग करेंगे। आज ३१ वाँ है। 31 फरवरी क्या है? :)
ग्रेग

आपके रिफ़ैक्‍टर्ड कोड में कोई त्रुटि है। 15 वें पैरामीटर के रूप में प्रदान नहीं किया जा रहा है, mktimeलेकिन 3 डी पैरामीटर के रूप में, 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)));û A --entt ’
रूबी

2
@Roubi जैसा कि utf8_encode को "ISO-8859-1 स्ट्रिंग को UTF-8 में एन्कोड किया जाता है", इसका मतलब है कि आपका ISO ISO-8859-1 था। यदि आप हर जगह UTF-8 चाहते हैं (और आपका PHP कोड UTF-8 में डिफ़ॉल्ट रूप से नहीं चलता है), तो आप setlocale में LC_TIME के ​​बजाय LC_ALL का उपयोग कर सकते हैं।
डेरेकसन

6

यदि आप वर्ष की शुरुआत से अंत तक महीने के नाम की एक सरणी चाहते हैं, जैसे ड्रॉप-डाउन का चयन करने के लिए उदाहरण के लिए, मैं सिर्फ निम्नलिखित का उपयोग करूंगा;

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

6

दिए गए नंबर से एक महीने प्रिंट करने के कई तरीके हैं। आप के लिए एक सूट उठाओ।

1. दिनांक () फंक्शन पैरामीटर 'F' के साथ

कोड उदाहरण:

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

2. createFromFormat () का उपयोग करके php डेट ऑब्जेक्ट बनाकर

कोड उदाहरण

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

3. strtotime () फ़ंक्शन

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

4. mktime () फ़ंक्शन

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

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

यह कोड मान लेता है कि आपके पास महीने की संख्या $ 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 try के साथ संगतता के लिए: utf8_encode (ucfirst (strftime ("% B", strtotime ($ date))));
ममौनी

1
@ मिमौनी की जरूरत नहीं है क्योंकि utf8_encode फ़ंक्शन ISO-8859-1 स्ट्रिंग्स को UTF-8 में परिवर्तित करता है, लेकिन LC_ALL के माध्यम से, कोड को UTF-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

नहीं, लेकिन आप i18n फ़ंक्शंस के साथ लौटे तारों को बदल सकते हैं जो आपकी चुनी हुई भाषा में महीने लौटाते हैं
फ्रीकी टर्टल

0

माह संख्या प्रदान करके महीने का नाम प्राप्त करने के लिए

$ month_number = 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। आप जनवरी महीने के मार्च महीने आदि के रूप में पूरे महीने का नाम पाने के लिए 'M' के बजाय 'F' के साथ कोशिश कर सकते हैं।

$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 ईसा पूर्व, दिवस 1 जनवरी 02, 4713 ईसा पूर्व, आदि 20 अक्टूबर 2014 (ग्रेगोरियन तिथि के रूप में) जूलियन दिन 2456951 (जो जूलियन तारीख के रूप में 7 अक्टूबर, 2014) है। PHP अजीब तरीके से 0 जूलियन डे को ठीक से नहीं लगता है: इको जदोजुलियन (0)। "<br/>"; echo jdtojulian (1)। "<br/>"; echo jdtojulian (2)। "<br/>"; रिटर्न: 0/0/0 1/2 / -4713 1/3 / -4713
जॉर्ज लैंगले

-3

आप एसक्यूएल में सिर्फ महीनेनाम () फ़ंक्शन का उपयोग कर सकते हैं।

महीने के हिसाब से तालिका समूह से महीने का नाम (date_column) चुनें (date_column)


1.) PHP से पूछा गया था, SQL 2 नहीं।) आपका जवाब MySQL विशिष्ट प्रतीत होता है, सामान्य SQL नहीं।
मार्टी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.