2013-08-29 52 views
0

我得到一个数组从形式$ 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(); 
+0

你试过'$ formData ['date'] - > timezone;'? – Bora

+0

你有什么错误? 'getTimezone'是一种方法,但它返回一个对象,而不是一个字符串[RTFM](http://www.php.net/manual/en/class.datetime.php),它返回一个DateTimeZone实例,所以你可能正在寻找' - > getTimezone() - > getName();' –

回答

1

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

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

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

......或者......

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

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

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; 
?> 
+0

_proper_方法就像Filou所示:使用方法。这是最安全的方式。直接访问该属性并不像它可能的那样整洁。假设下一个主要版本使所有属性保密? –

+0

你是对的,这将是一个很大的变化,可能会打破很多脚本,但这是一个可能性,我们必须记住 – Imanol

1

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

日期时间:: 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" 
+0

+ 1的文档链接,方法签名和_proper_方式到达时区(通过方法调用) –

+0

感谢复制粘贴该部分从我的答案:) – nifr

+0

@nifr:我看不到2个语句完全相似,所以复制粘贴不在这里 –

相关问题