代码之家  ›  专栏  ›  技术社区  ›  user1950349

在php中以特定格式显示month数组中的日期

  •  1
  • user1950349  · 技术社区  · 4 年前

    我有一个php代码,如下所示,其中有一个法国月份数组。

    <?php
    $months = array(
        1 => "janvier",
        2 => "février",
        3 => "mars",
        4 => "avril",
        5 => "mai",
        6 => "juin",
        7 => "juillet",
        8 => "août",
        9 => "septembre",
        10 => "octobre",
        11 => "novembre",
        12 => "décembre",
    );
    ?>
    

    问题陈述:

    我想要实现的是以以下格式显示日期:

    08 août 2020
    

    对于每月的第一天,在数字后面加上er:

    e.g. 1er août 2020
    

    这就是我尝试过的 . 虽然它的工作原理是 Line A prints 08 août 2020 但我想知道它是否能在所有情况下都起作用。这里所有的案子都是指一个月的所有日子。

    我已经硬编码了Z行的值,但它会改变。

    <?php
    $months = array(
        1 => "janvier",
        2 => "février",
        3 => "mars",
        4 => "avril",
        5 => "mai",
        6 => "juin",
        7 => "juillet",
        8 => "août",
        9 => "septembre",
        10 => "octobre",
        11 => "novembre",
        12 => "décembre",
    );
    $this_date="2020-08-08";   // Line Z 
    $this_time = strtotime($this_date);
    $day = date('d', $this_time);
    $month = date('n', $this_time);
    $month_fr = $months[$month];
    $suffix = $day == 1 ? 'er' : '';
    $formatted_new_fr = strftime("%d$suffix " . $month_fr . " %Y", $this_time);
    echo $formatted_new_fr;  // Line A
    ?>
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   SirPilan    4 年前

    我帮你搞定了:)

    setlocale(LC_TIME, 'fr_FR');
    
    $dateString = '2020-08-08';
    $timestamp = strtotime($dateString);
    $formattedDate = strftime('%d %B %Y', $timestamp);
    //setlocale(LC_ALL, Locale::getDefault()); // restore (if neccessary)
    
    echo utf8_encode($formattedDate);
    

    08 août 2020
    

    工作 example

    1er 有一天你可以做你已经做过的事。把strftime(或它的结果)分开。

    参考文献


    另一个解决方案(将按顺序显示所有日期)

    $locale = 'fr_FR';
    $dateString = '2020-08-01';
    $date = new DateTimeImmutable($dateString);
    $dateFormatter = new IntlDateFormatter(
        $locale,
        IntlDateFormatter::FULL,
        NULL
    );
    
    $numberFormatter = new NumberFormatter($locale, NumberFormatter::ORDINAL);
    $ordinalDay = $numberFormatter->format($date->format('d'));
    $dateFormatter->setPattern('LLLL Y');
    
    echo $ordinalDay . ' ' . $dateFormatter->format($date->getTimestamp());
    

    1er août 2020
    

    工作 example