Retrieving Day Names in PHP

前端 未结 7 611
-上瘾入骨i
-上瘾入骨i 2021-01-11 15:44

I need to display to user a list of localized day names (like \'Monday\', \'Tuesday\', ...) in a form. I know ho to get day name of any date. But is there a particular and f

7条回答
  •  心在旅途
    2021-01-11 16:11

    Using strftime() in combination with setlocale() is an option.

    However you should be aware that on threaded php installs, setlocale() can behave unexpected, since locale information is maintained per process, not per thread. Therefor it is important to call setlocale() every time before each call to strftime() to guarantee it uses the correct locale.

    Also, for Windows systems, you need to use somewhat unusual strings for the $locale parameter for setlocale().

    See the docs for more information on both of these issues.

    Something like this should work:

    // define the locales for setlocale() for which we need the daynames
    $locales = array(
      'en_EN',
      'de_DE',
      'nl_NL'
      // etc...
    );
    
    // be aware that setlocale() needs different values on Windows machines
    // see the docs on setlocale() for more information
    $locales = array(
      'english',
      'german',
      'dutch'
      // etc...
    );
    
    // let's remember the current local setting
    $oldLocale = setlocale( LC_TIME, '0' );
    
    // initialize out result array
    $localizedWeekdays = array();
    
    // loop each locale
    foreach( $locales as $locale )
    {
        // create sub result array for this locale 
        $localizedWeekdays[ $locale ] = array();
    
        // 7 days in a week
        for( $i = 0; $i < 7; $i++ )
        {
            // set the locale on each iteration again
            setlocale( LC_TIME, $locale );
    
            // combine strftime() with the nifty strtotime()
            $localizedWeekdays[ $locale ][] = strftime( '%A', strtotime( 'next Monday +' . $i . ' days' ) );
    
            // reset the locale for other threads, as a courtesy
            setlocale( LC_TIME, $oldLocale );
        }
    }
    
    // there is your result in a multi-dimensional array
    var_dump( $localizedWeekdays );
    

提交回复
热议问题