Ankündigung

Einklappen
Keine Ankündigung bisher.

strftime PHP 8.1.0 DEPRECATED - Alternativen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • strftime PHP 8.1.0 DEPRECATED - Alternativen

    Die Funktion strftime war in Verbindung mit setlocale() lange Zeit das Mittel der Wahl um Monats- und Wochentagsnamen in einer anderen Sprache auszugeben. Mit PHP 9 wird diese Funktion aus PHP entfernt.

    Welche Alternativen bieten sich an?

    Es gibt Lösungen mit der IntlDateFormatter Klasse. Beispiel:

    PHP-Code:
    function formatIntl(DateTimeInterface $datestring $formatstring $language) {
        
    //check calendar in $language
        
    $calType = (stripos($language,"@calendar") > 0
          
    AND stripos($language,"gregorian") === false)
          ? 
    IntlDateFormatter::TRADITIONAL
          
    IntlDateFormatter::GREGORIAN;

        
    $intlFormatter datefmt_create$language ,
              
    IntlDateFormatter::FULL,
              
    IntlDateFormatter::FULL,
              
    $date->getTimezone(),
              
    $calType,
              
    $format);
        return 
    datefmt_format($intlFormatter ,$date);
    }

    $dt = new DateTime('2022-02-01');
    echo 
    formatIntl($dt,'EEEE d.MMMM Y','de_DE');
    //Dienstag 1.Februar 2022 
    Hier wird das icuFormat benötigt. Bequemer und für die meisten Fälle ausreichend wäre hier ein Format wie es auch von Date und DateTime::format benutzt wird.

    Andere Alternativen zu INTL ?

  • #2
    Also ich habe immer schon seit PHP 5 den IntlDateFormatter und niemals strftime verwendet, somit ändert sich für mich nichts. strftime() und setlocale() hat zahlreiche Nachteile. Zum Beispiel Zeichenkodierungsunterschiede je nach Serverkonfiguration.

    Kommentar


    • #3
      PHP-Code:

      $formatter 
      = new IntlDateFormatter(
          
      "de-DE",
          
      IntlDateFormatter::FULL,
          
      IntlDateFormatter::NONE
      );

      $dateTime = new DateTime('2022-02-01');
      var_dump($formatter->format($dateTime)); 

      Kommentar


      • #4
        Im Zusammenhang mit dem Beispiel von Blar hier mal einige Kombinationen mit den IntlDateFormatter-Konstanten.


        Datum: 2010-03-16 10:34:55
        FULL+NONE Dienstag, 16. März 2010 Tuesday, 16 March 2010 вторник, 16 марта 2010 г. 2010年3月16日火曜日
        LONG+NONE 16. März 2010 16 March 2010 16 марта 2010 г. 2010年3月16日
        MEDIUM+NONE 16.03.2010 16 Mar 2010 16 мар. 2010 г. 2010/03/16
        SHORT+NONE 16.03.10 16/03/2010 16.03.2010 2010/03/16
        NONE+FULL 10:34:55 Mitteleuropäische Normalzeit 10:34:55 Central European Standard Time 10:34:55 Центральная Европа, стандартное время 10時34分55秒 中央ヨーロッパ標準時
        NONE+LONG 10:34:55 MEZ 10:34:55 CET 10:34:55 GMT+1 10:34:55 GMT+1
        NONE+MEDIUM 10:34:55 10:34:55 10:34:55 10:34:55
        NONE+SHORT 10:34 10:34 10:34 10:34
        FULL+SHORT Dienstag, 16. März 2010 um 10:34 Tuesday, 16 March 2010 at 10:34 вторник, 16 марта 2010 г., 10:34 2010年3月16日火曜日 10:34
        FULL+LONG Dienstag, 16. März 2010 um 10:34:55 MEZ Tuesday, 16 March 2010 at 10:34:55 CET вторник, 16 марта 2010 г., 10:34:55 GMT+1 2010年3月16日火曜日 10:34:55 GMT+1
        FULL+MEDIUM Dienstag, 16. März 2010 um 10:34:55 Tuesday, 16 March 2010 at 10:34:55 вторник, 16 марта 2010 г., 10:34:55 2010年3月16日火曜日 10:34:55
        .
        Was mir hier auffällt ist die teilweise eigenartige Abhängigkeit der Darstellung des Datums von der Sprache.

        Kommentar

        Lädt...
        X