【问题标题】:MLA style month abbreviation with PHP date format?MLA风格的月份缩写与PHP日期格式?
【发布时间】:2015-02-10 09:53:33
【问题描述】:

对于已经有一段时间没有上过灯光课的人来说,MLA 是现代语言风格,月份是这样缩写的

  • 一月 - 一月
  • 2 月 - 2 月
  • 三月 - 三月
  • 4 月 - 4 月
  • 5 月 - 5 月
  • 六月 - 六月
  • 7 月 - 7 月
  • 8 月 - 8 月。
  • 9 月 - 9 月。
  • 10 月 - 10 月
  • 11 月 - 11 月
  • 12 月 - 12 月

使用 PHP,很容易获得缩写或不缩写

$date = DateTime::createFromFormat('Ymd', $unformatted_date_string);
// abbreviated
echo $date->format('M d, Y');
// not abbreviated
echo $date->format('m d, Y');

但是查看了http://php.net/manual/en/datetime.formats.date.php 并没有找到将两者结合起来的方法。有比字符串解析更好的解决方案吗?

【问题讨论】:

  • 你的意思是你正在向 createFromFormat() 传递一个包含 both 格式的月份的字符串?
  • 不,抱歉,这有点令人困惑。 $unformatted_date_string 是通过日期选择器输入的,所以类似于 2014/11/12
  • 我目前正在做的是 $month = $date->format('m') 然后通过 switch case 运行它并返回我需要的月份字符串。没关系,但能找到更有效的解决方案会很棒。
  • 我认为 Capital J 是这样做的,但我在文档中找不到它...

标签: php date-formatting


【解决方案1】:

您总是可以只格式化长度超过 4 个字符的月份。看起来这就是你真正想做的一切。

// load array with all months for example
for ($x = 1; $x <= 12; $x++) {
    $dates[] = new DateTime('2016-' . $x . '-1');
}

// length is > 4
// if: echo abbreviated month
// else: echo unformatted month
foreach($dates as $date) {
    if (strlen($date->format('F')) > 4) {
        echo $date->format('M') . ".";
    } else {
        echo $date->format('F');
    }

    echo "\r\n";
}

结果: Jan. Feb. Mar. Apr. May June July Aug. Sep. Oct. Nov. Dec.

code on php fiddle

【讨论】:

  • 九月不行,输出应该是九月。
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 2014-08-25
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2013-03-02
  • 2011-05-23
相关资源
最近更新 更多