【问题标题】:DatePeriod not setting the timezone [duplicate]DatePeriod 未设置时区 [重复]
【发布时间】:2018-11-23 11:19:51
【问题描述】:

我正在创建一个DatePeriod,我想用法语显示月份和日期的名称:

$timeZoneParis = new DateTimeZone('Europe/Paris');
$dateDebutCalendrier = new DateTime('2018-11-01', $timeZoneParis);
$dateFinCalendrier = new DateTime('2018-11-31', $timeZoneParis);
$period = new DatePeriod($dateDebutCalendrier,new DateInterval('P1D'),$dateFinCalendrier);

预期结果:

詹维尔、费弗里尔……

实际结果:

一月、二月……

【问题讨论】:

  • 我不确定您所说的“最佳时区”是什么意思?您能否编辑您的问题以澄清 1. 您得到什么结果以及 2. 您期望什么结果?您没有将DateTimeZone 传递给$lastDayThisMonth - 这是故意的还是疏忽?
  • @DarraghEnright 不是故意的,我已将代码更改为更好的格式并更新了我的问题 :)
  • 我现在明白了。这不是您可以使用DateTimeDatePeriod 直接配置或控制的东西——这是一个基于语言环境的问题,DateTime 不支持语言环境。您有几个选择,包括IntlDateFormatter(如果已安装)或strftime()Here are some helpful answers
  • 我试过这个:echo strftime("%d %B", $dateDebutCalendrier->getTimestamp()); 但这仍然是英文
  • @ProjetSin - 查看一周前提出的 dup 问题,它与您的问题非常相似。你和那个作者(kalvn)有某种联系吗?这似乎是StackOverflow déjà-vu 的另一个案例......你能解释一下这个现象吗?谢谢。

标签: php date timezone


【解决方案1】:

感谢评论,这是解决方案:

setlocale(LC_TIME, 'fr_FR','fra');
echo(strftime("%B", $dateDebutCalendrier->getTimestamp());

小编辑:我还需要在时间戳中添加 (3*3600) 以获得正确的第一天。

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多