2010-09-24 130 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文件