[英]Convert Month Name into Number With Different Languages?
我想将月份名称转换为具有不同语言的数字格式。 我编写了一个代码,该代码可在我的本地主机上运行,但不能在实时服务器上运行,它返回假值。 而且几个月以来,它对于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;
}
如果您可以集成外部类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类的工作独立于服务器的本地设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.