首页 > 解决方案 > 将月份名称转换为不同语言的数字?

问题描述

我想将月份名称转换为具有不同语言的数字格式。我已经编写了一段代码,该代码在我的本地主机上运行,​​但在实时服务器上无法运行,它返回错误值。还有几个月它在Dezembro工作并且它不工作,outubro它不工作。我该如何解决这个问题?你能帮我解决这个问题吗?

$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;

}

标签: phplocalizationstrtotime

解决方案


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

$visit_date = "7 Dezembro, 2019";

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

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

在内部,班级在设置语言时会为每个月创建一个翻译表。IntlDateFormatter用于此目的。

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


推荐阅读