在 php 中以法语显示月份名称?
display month name in french in php?
我正在编写如下所示的 php 代码:
<?php <time datetime="<?php echo esc_attr(date_format($ts, 'H:i d-m-Y')) ?>"
data-timezone="<?php echo esc_attr($tz_param) ?>"><?php echo esc_html(date_format($ts, 'F j H:i')) ?></time> ?> // Line A
A行 return网页上的以下日期:
July 10 21:30
print_r($ts)
打印:
DateTime Object
(
[date] => 2019-07-10 21:30:00.000000
[timezone_type] => 3
[timezone] => America/New_York
)
July 10 21:30
问题陈述:
我想知道我应该对上面 A 行 的 php 代码进行哪些更改,以便当 页面为法语时,它应该 return 法语日期。
这是我试过的,但它仍然是return英文日期。
<?php if(ICL_LANGUAGE_CODE=='fr'){
setlocale(LC_TIME, 'fr_FR');
?>
<time datetime="<?php echo esc_attr(date_format($ts, 'H:i d-m-Y')) ?>"
data-timezone="<?php echo esc_attr($tz_param) ?>"><?php echo strftime(esc_html(date_format($ts, 'F j H:i'))) ?></time> // Line B
<?php } ?>
B行上面仍然是return英文。
使用 strftime : http://php.net/manual/en/function.strftime.php
<?php
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %d.%M.%Y and");
(不确定 %d.%M.%Y 但您可以阅读文档)
OR use Carbon package
本地化http://carbon.nesbot.com/docs/#api-localization
Carbon::setLocale('fr');
Carbon::yesterday()-> diffForHumans();
假设您网站的基本语言是法语,您可以像这样使用 built-in WordPress 功能 date_i18n()
:
echo date_i18n( 'F j H:i', $ts ); //Assuming $ts is your time stamp
如果 $ts
实际上是一个日期对象,你必须先像这样获取时间戳:
echo date_i18n( 'F j H:i', $ts->getTimeStamp() ); //Assuming $ts is a dateTime object
如果您正在为时区差异而苦苦挣扎(即返回的时间是几个小时 ahead/behind),那么您需要将函数与 get_date_from_gmt
结合起来,如下所示:
$correct_date = get_date_from_gmt(date_format($ts, 'Y-m-d H:i:s')); //gets the date in your current timezone
echo date_i18n( 'F j H:i', strtotime($correct_date) );
引用自 php doc
Note:
The return value of setlocale() depends on the system that PHP is running. It returns exactly what the system setlocale function returns.
setlocale(LC_ALL, 'fr_FR');
echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978)); //vendredi 22 d�cembre 1978
您应该使用 intl 扩展名:
$ts = new DateTime();
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::LONG);
$formatter->setPattern('MMMM d HH:mm');
echo $formatter->format($ts);
列出了 setPattern 的可用格式here
解决问题:
<?php
if (date("m", time() ) === "01" ) { print "Janvier"; }
if (date("m", time() ) === "02" ) { print "Février"; }
if (date("m", time() ) === "03" ) { print "Mars"; }
if (date("m", time() ) === "04" ) { print "Avril"; }
if (date("m", time() ) === "05" ) { print "Mai"; }
if (date("m", time() ) === "06" ) { print "Juin"; }
if (date("m", time() ) === "07" ) { print "Juillet"; }
if (date("m", time() ) === "08" ) { print "Août"; }
if (date("m", time() ) === "09" ) { print "Septembre"; }
if (date("m", time() ) === "10" ) { print "Octobre"; }
if (date("m", time() ) === "11" ) { print "Novembre"; }
if (date("m", time() ) === "12" ) { print "Décembre"; }
?>
我尝试使用 setlocale() 进程,但遇到了与您相同的问题。打印输出仍然是英文的。这可能是一个 'old school' 解决方案,但它很简单,而且有效。
来自http://php.net/manual/en/function.date.php:
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
我正在编写如下所示的 php 代码:
<?php <time datetime="<?php echo esc_attr(date_format($ts, 'H:i d-m-Y')) ?>"
data-timezone="<?php echo esc_attr($tz_param) ?>"><?php echo esc_html(date_format($ts, 'F j H:i')) ?></time> ?> // Line A
A行 return网页上的以下日期:
July 10 21:30
print_r($ts)
打印:
DateTime Object
(
[date] => 2019-07-10 21:30:00.000000
[timezone_type] => 3
[timezone] => America/New_York
)
July 10 21:30
问题陈述:
我想知道我应该对上面 A 行 的 php 代码进行哪些更改,以便当 页面为法语时,它应该 return 法语日期。
这是我试过的,但它仍然是return英文日期。
<?php if(ICL_LANGUAGE_CODE=='fr'){
setlocale(LC_TIME, 'fr_FR');
?>
<time datetime="<?php echo esc_attr(date_format($ts, 'H:i d-m-Y')) ?>"
data-timezone="<?php echo esc_attr($tz_param) ?>"><?php echo strftime(esc_html(date_format($ts, 'F j H:i'))) ?></time> // Line B
<?php } ?>
B行上面仍然是return英文。
使用 strftime : http://php.net/manual/en/function.strftime.php
<?php
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %d.%M.%Y and");
(不确定 %d.%M.%Y 但您可以阅读文档)
OR use Carbon package
本地化http://carbon.nesbot.com/docs/#api-localization
Carbon::setLocale('fr');
Carbon::yesterday()-> diffForHumans();
假设您网站的基本语言是法语,您可以像这样使用 built-in WordPress 功能 date_i18n()
:
echo date_i18n( 'F j H:i', $ts ); //Assuming $ts is your time stamp
如果 $ts
实际上是一个日期对象,你必须先像这样获取时间戳:
echo date_i18n( 'F j H:i', $ts->getTimeStamp() ); //Assuming $ts is a dateTime object
如果您正在为时区差异而苦苦挣扎(即返回的时间是几个小时 ahead/behind),那么您需要将函数与 get_date_from_gmt
结合起来,如下所示:
$correct_date = get_date_from_gmt(date_format($ts, 'Y-m-d H:i:s')); //gets the date in your current timezone
echo date_i18n( 'F j H:i', strtotime($correct_date) );
引用自 php doc
Note: The return value of setlocale() depends on the system that PHP is running. It returns exactly what the system setlocale function returns.
setlocale(LC_ALL, 'fr_FR');
echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978)); //vendredi 22 d�cembre 1978
您应该使用 intl 扩展名:
$ts = new DateTime();
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::LONG);
$formatter->setPattern('MMMM d HH:mm');
echo $formatter->format($ts);
列出了 setPattern 的可用格式here
解决问题:
<?php
if (date("m", time() ) === "01" ) { print "Janvier"; }
if (date("m", time() ) === "02" ) { print "Février"; }
if (date("m", time() ) === "03" ) { print "Mars"; }
if (date("m", time() ) === "04" ) { print "Avril"; }
if (date("m", time() ) === "05" ) { print "Mai"; }
if (date("m", time() ) === "06" ) { print "Juin"; }
if (date("m", time() ) === "07" ) { print "Juillet"; }
if (date("m", time() ) === "08" ) { print "Août"; }
if (date("m", time() ) === "09" ) { print "Septembre"; }
if (date("m", time() ) === "10" ) { print "Octobre"; }
if (date("m", time() ) === "11" ) { print "Novembre"; }
if (date("m", time() ) === "12" ) { print "Décembre"; }
?>
我尝试使用 setlocale() 进程,但遇到了与您相同的问题。打印输出仍然是英文的。这可能是一个 'old school' 解决方案,但它很简单,而且有效。
来自http://php.net/manual/en/function.date.php:
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().