【问题标题】:Translate the names of the days in other languages将日子名称翻译成其他语言
【发布时间】:2020-04-18 09:22:55
【问题描述】:

大家好,我是 PHP 新手……有了这个函数,我可以知道两个日期之间的日子的名称,但我不能在不破坏它的情况下将它翻译成意大利语。有人能帮我吗? 我尝试在这两种模式下使用 strftime(),但它给了我错误:strftime() 期望参数 2 是 int,给定对象,我已经完成了日期的 var_dump,它是对象,我需要转换它或这不是我问题的答案?

$from_date = new DateTime($from_date);
    $to_date = new DateTime($to_date);

    for ($date = $from_date; $date <= $to_date; $date->modify('+1 day')) {
       echo $date->format('l') . "\n";
       //echo strftime("%A", $date); error : strftime() expects parameter 2 to be int, object given
      //var_dump($date);  object(DateTime)
      }

输出:周三周四周五

我选择 $from_date 和 $to_date 来自:

+------------+------------+
| from_date  | to_date    |
+============+============+
| 2020-04-01 | 2020-04-03 |
+------------+------------+

【问题讨论】:

  • $from_date 和 $to_date 是如何定义的?
  • @T.Zen 现在好点了吗?
  • 如果你把 setlocale(LC_TIME, 'it_IT.UTF-8');在 $from_date 和 $to_date 之前?
  • 与我在名称上方更新的结果相同...
  • @axel 我认为你需要设置标题header("Content-Type: text/html; charset=ISO-8859-1");

标签: php


【解决方案1】:

如果您正确设置语言环境setlocale(LC_TIME, 'it_IT.UTF-8');,这应该对您有用。我还稍微修改了您的代码,使其更具可读性和简洁性。

<?php
setlocale(LC_TIME, 'it_IT.UTF-8');
$period = new DatePeriod(new DateTime('2020-04-07'),new DateInterval('P1D'),new DateTime('2020-04-18'));
foreach ($period as $key => $value) {
  echo strftime("%A", $value->getTimestamp()).PHP_EOL;     
}
?>

工作演示: https://3v4l.org/sYirG

【讨论】:

  • 我将您的格式与我的变量一起使用,新输出是:星期三星期四,我不知道为什么不起作用...我的代码是这样的:&lt;?php $from_date = new DateTime($from_date); $to_date = new DateTime($to_date); setlocale(LC_TIME, 'it_IT.UTF-8'); $period = new DatePeriod($from_date,new DateInterval('P1D'),$to_date); foreach ($period as $key =&gt; $value) { echo strftime("%A", $value-&gt;getTimestamp()).PHP_EOL;} ?&gt; 这真的很奇怪,因为在您的示例中作品
  • 可能是xampp的问题?
  • @axel 你需要设置标题header("Content-Type: text/html; charset=ISO-8859-1");也看看这里stackoverflow.com/a/15138120/1138192
  • SET_LOCALE 文档:警告语言环境信息是按进程维护的,而不是按线程维护的。如果您在 Windows 上的 IIS、HHVM 或 Apache 等多线程服务器 API 上运行 PHP,您可能会在脚本运行时遇到语言环境设置的突然变化,尽管脚本本身从未调用 setlocale()。这是因为其他脚本同时在同一进程的不同线程中运行,使用 setlocale() 更改了进程范围的语言环境。
【解决方案2】:

我修复了它:

for ($date = $from_date; $date <= $to_date; $date->modify('+1 day')) {
      echo utf8_encode (strftime("%A", $date->getTimestamp())).PHP_EOL;  
     }

输出:mercoledì giovedì venerdì

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多