2010-09-24 121 views
1

我有以下一段代码。我录的输出,以及:在PHP中创建新的DateTime对象不起作用

function convertGeneralAvailabilityTime($date,$from_timezone,$from_timebegin, $from_time$ 
{ 
echo "$date,$from_timezone,$from_timebegin, $from_timeend, $to_timezone"; 
// 2010-09-19,America/New_York,07:45:00, 08:00:00, America/Los_Angeles 

$tz1 = new DateTimezone($from_timezone); 

$datetime1 = new DateTime("$date $from_timebegin", $tz1); 
$datetime2 = new DateTime("$date $from_timeend", $tz1); 

echo "$date $from_timebegin"; 
// 2010-09-19 07:45:00 
echo "$date $from_timeend"; 
// 2010-09-19 08:00:00 
var_export($tz1); 
//DateTimeZone::__set_state(array(
//)) 
var_export($datetime1); 
//DateTime::__set_state(array(
//)) 

什么是错我的PHP的日期时间()功能可按 - 但我不能参透!我在这台服务器上使用PHP 5.2.14。


编辑1:对不起,曲解一些PHP输出 - 纠正它上面


编辑2:我有这给了恰好输出如下下面的测试文件

<?php 
$date = '2010-09-19'; 
$from_timezone = 'America/New_York'; 
$from_timebegin = '07:45:00'; 
$from_timeend = '08:00:00'; 
$to_timezone = 'America/Los_Angeles'; // Trimmed 2010-09-19 07:45:002010-09-19 

$tz1 = new DateTimezone($from_timezone); 

$datetime1 = new DateTime("$date $from_timebegin", $tz1); 
$datetime2 = new DateTime("$date $from_timeend", $tz1); 

echo "$date $from_timebegin".PHP_EOL; 
echo "$date $from_timeend".PHP_EOL; 
var_dump($tz1); 
var_dump($datetime1); 

?> 

输出:

jailshell-3.2$ php dttest.php 
2010-09-19 07:45:00 
2010-09-19 08:00:00 
object(DateTimeZone)#1 (0) { 
} 
object(DateTime)#2 (0) { 
} 

编辑3 - 如果有帮助,我的phpinfo显示这个问题,以及

date 
date/time support enabled 
"Olson" Timezone Database Version 2010.12 
Timezone Database external 
Default timezone America/Chicago 

回答

0

我简化跑你的代码。这是输出:

php > $date = '2010-09-19'; 
php > $from_timezone = 'America/New_York'; 
php > $from_timebegin = '07:45:00'; 
php > $from_timeend = '08:00:00'; 
php > $to_timezone = 'America/Los_Angeles'; // Trimmed 2010-09-19 07:45:002010-09-19 08:00:00 
php > 
php > $tz1 = new DateTimezone($from_timezone); 
php > 
php > $datetime1 = new DateTime("$date $from_timebegin", $tz1); 
php > $datetime2 = new DateTime("$date $from_timeend", $tz1); 
php > 
php > echo "$date $from_timebegin".PHP_EOL; 
2010-09-19 07:45:00 
php > echo "$date $from_timeend".PHP_EOL; 
2010-09-19 08:00:00 
php > var_dump($tz1); 
object(DateTimeZone)#1 (0) { 
} 
php > var_dump($datetime1); 
object(DateTime)#2 (3) { 
    ["date"]=> 
    string(19) "2010-09-19 07:45:00" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(16) "America/New_York" 
} 

我没有看到问题。

你在顶部回声包含(后时区)

echo "$date, 
     $from_timezone, 
     $from_timebegin, 
     $from_timeend, 
     $to_timezone" 
; 

// 2010-09-19, 
// America/New_York, 
// 07:45:00, 
// 08:00:00, 
// America/Los_Angeles2010-09-19 07:45:002010-09-19 08:00:00 

什么是在结束所有多余的东西到底垃圾?

+0

我的var_dump($ datetime1);给出了完全'DateTime :: __ set_state(array( ))' – siliconpi 2010-09-24 11:25:09

+0

嘿迈克 - 为什么我没有得到任何输出为$ datetime1的任何想法? – siliconpi 2010-09-24 16:01:35

+0

@matt_tm当您复制我的代码并运行它时会发生什么? – 2010-09-24 16:33:21

-3
$datetime1 = new DateTime($date $from_timebegin, $tz1); 
$datetime2 = new DateTime($date $from_timeend, $tz1); 

echo $date $from_timebegin; 

echo $date $from_timeend; 
+3

这将完全运行到语法错误。 – halfdan 2010-09-24 10:48:21

1

在创建DateTime对象之前声明您的默认时区,例如。

date_default_timezone_set('America/New_York'); 
$tz1 = new DateTimezone($from_timezone); 
$datetime1 = new DateTime("$date $from_timebegin", $tz1); 
$datetime2 = new DateTime("$date $from_timeend", $tz1); 

或者宣布它与date.timezone =“美国/纽约”你的php.ini文件