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));
...
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
لقد وجدت هذا على https://css-tricks.com/snippets/php/change-month-number-to-month-name/ وعمل بشكل مثالي.
date("F", strtotime($result["month"]))
استخدم الرمز أعلاه