将月份名称转换为不同语言的数字?

Convert Month Name into Number With Different Languages?

我想将月份名称转换为不同语言的数字格式。我写了一段代码,代码在我的本地主机上工作,但它在实时服务器上不工作,它返回 false 值。而且几个月来它的工作和它不工作 Dezembrooutubro 它不工作。我该如何解决这个问题?你能帮我解决这个问题吗??

$visit_date = "7 Dezembro, 2019";

 $split_date = explode(" ", $visit_date);  
      $visit_day = sprintf("%02d", $split_date[0]);
      $visit_month = $split_date[1];     

          if (substr($visit_month, -1) == ',')
          {
              $visit_month = substr($visit_month, 0, -1);
              $visit_year =   $split_date[2];   

          }      
          else {
              $visit_year =   $split_date[3];     
          }      

          var_dump($visit_month);
      $visit_month =  month_to_number($visit_month, 'pt_PT');

var_dump($visit_month);



// convert visit date month full name to month number for all languages
function month_to_number($month, $locale_set= 'pt_PT' )
{

    $month  = mb_convert_case($month, MB_CASE_LOWER, 'UTF-8');

    $locale =
        setlocale(LC_TIME, '0');
        setlocale(LC_TIME, $locale_set.'.UTF-8');

    $month_number = FALSE;

    for ($i = 1; $i <= 12; $i++)
    {
        $time_month     = mktime(0, 0, 0, $i, 1, 1970);
        $short_month    = date('M', $time_month);
        $short_month_lc = strftime('%b', $time_month);

        if (stripos($month, $short_month) === 0 OR
            stripos($month, $short_month_lc) === 0)
        {
            $month_number = sprintf("%02d", $i);

            break;
        }
    }

    setlocale(LC_TIME, $locale); // return locale back

    return $month_number;

}

如果可以集成外部 class dt 试试这个:

$visit_date = "7 Dezembro, 2019";

dt::setDefaultLanguage('pt');
$dt = dt::create($visit_date);

echo $dt->format('Y-m-d');//2019-12-07

在内部,class 在设置语言时为每个月创建一个翻译 table。 IntlDateFormatter class 用于此。

注意:IntlDateFormatter class 独立于服务器的本地设置工作。