online - time php




تحويل رقم إلى شهر اسم في PHP (12)

أستخدم حاليًا الحل أدناه لمعالجة نفس المشكلة:

//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

لمعرفة المزيد عن strftime ، انتقل إلى http://php.net/manual/en/function.strftime.php

يتم استخدام Ucfirst() الحرف الأول في سلسلة.

لدي كود PHP هذا:

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

echo $monthName;

لكنها تعود إلى December بدلاً من August .

تساوي $result["month"] 8 ، لذا تقوم وظيفة sprintf بإضافة 0 لجعله 08 .


أعتقد أن استخدام 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 ()


إذا كان لديك رقم الشهر ، فيمكنك أولاً إنشاء تاريخ منه بتواريخ افتراضية للسنة الأولى والسنة الافتراضية للسنة الحالية ، ثم استخراج اسم الشهر من التاريخ الذي تم إنشاؤه:

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

تفترض هذه الشفرة أن لديك رقم شهر مخزن في $ i

أمل أن هذا يساعد شخصاما


إذا كنت تريد فقط مجموعة من أسماء الأشهر من بداية السنة حتى النهاية ، على سبيل المثال لملائمة تحديد القائمة المنسدلة ، فإنني سأستخدم فقط ما يلي ؛

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

استخدم وظيفة أصلية مثل jdmonthname() :

echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);

استعمال:

$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);

تحتاج إلى تعيين الحقول مع strtotime أو mktime

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

مع mktime تعيين الشهر فقط. جرب هذه:

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

فقط لأن الجميع يستخدم الدالتين strtotime () و date () ، فسوف أقوم بعرض مثال DateTime :

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

هذا سهل للغاية ، لماذا الكثير من الناس يقدمون اقتراحات سيئة كهذه؟ كانBora الأقرب ، ولكن هذا هو الأقوى

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

هذه هي الطريقة للقيام بذلك


strtotime يتوقع تنسيق تاريخ قياسي ، ويعيد طابعًا زمنيًا.

يبدو أنك تمرر strtotime برقم واحد لإخراج تنسيق تاريخ من.

يجب أن تستخدم mktime الذي يأخذ عناصر التاريخ كمعلمات.

رمزك الكامل:

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

echo $monthName;

ومع ذلك ، لا تتطلب وظيفة mktime رقم صفر إلى رقم الشهر ، لذا فإن السطر الأول غير ضروري تمامًا ، ويمكن تمرير $result["month"] مباشرة إلى الوظيفة.

يمكن دمج كل ذلك في سطر واحد ، مرددًا التاريخ مضمَّنًا.

رمز refactored الخاص بك:

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

...



date("F", strtotime($result["month"]))

استخدم الرمز أعلاه





date