【问题标题】:Get date and timezone from a form从表单中获取日期和时区
【发布时间】:2013-09-01 19:12:41
【问题描述】:

我从 $formData 表单中得到一个数组:

Array ( [first_name] => 12 [last_name] => 1 [date] => DateTime Object ( [date] => 2008-01-01 00:00:00 [timezone_type] => 3 [timezone] => Europe/Berlin ) [sex_id] => 1 [terms] => 1 )

如何到达 [日期] 和 [时区]?

这不起作用:

$formData['date']->getTimezone();

【问题讨论】:

  • 你试过$formData['date']->timezone;吗?
  • 您遇到了什么错误? getTimezone 是一个方法,但它返回一个对象,而不是一个字符串 RTFM,它返回一个 DateTimeZone 实例,所以你可能正在寻找 ->getTimezone()->getName();

标签: php date symfony timezone


【解决方案1】:

只要$formData['date'] 真正返回DateTime 类型的对象getTimezone() 就可以工作。这将返回 DateTimeZone 对象。

为了获得时区的名称,请使用:

$formData['date']->getTimezone()->getName()

...或...

timezone_name_get($formData['date']->getTimezone());

【讨论】:

    【解决方案2】:

    是的...确实有点慢,但评论和回答都是正确的。

    DateTime::getTimezone() 返回一个 DateTimeZone 对象,见doc

    public DateTimeZone DateTime::getTimezone ( void )
    

    但是你不一定需要对象,但是如果你想访问字段,使用

    $datetime->timezone
    

    或者一个完整的例子:

    $array = array(
    'blah'  => 0,
    'date'  => new Datetime(),
    'blub'  => 1
    );
    
    var_dump($array);
    
    var_dump($array['date']->timezone);
    
    var_dump($array['date']->getTimezone()->getName());
    

    输出:

    array(3) {
      ["blah"]=>
      int(0)
      ["date"]=>
      object(DateTime)#1 (3) {
        ["date"]=>
        string(19) "2013-08-29 13:25:08"
        ["timezone_type"]=>
        int(3)
        ["timezone"]=>
        string(13) "Europe/Berlin"
      }
      ["blub"]=>
      int(1)
    }
    string(13) "Europe/Berlin"
    string(13) "Europe/Berlin"
    

    【讨论】:

    • +1 用于文档链接、方法签名和到达时区的正确方式(通过方法调用)
    • @nifr:我没有看到 2 个完全一样的句子,所以复制粘贴不在此处
    【解决方案3】:

    您是否尝试过直接访问时区属性?我认为它是公开的

    class DateTime#1 (3) {
      public $date =>
      string(19) "2013-08-29 13:24:59"
      public $timezone_type =>
      int(3)
      public $timezone =>
      string(13) "Europe/Berlin"
    }
    
    
    <?php
    $timezone = $frmData['date']->timezone; 
    ?>
    

    【讨论】:

    • 正确的方式如 Filou 所示:使用方法。这是最安全的方法。直接访问该属性并不像它可能的那样整洁。假设下一个主要版本将所有属性设为私有?
    • 你是对的,这将是一个很大的变化,可能会破坏很多脚本,但这是我们必须牢记的一种可能性
    猜你喜欢
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多