我已经设置了一个快速的小测试来理解和调试mySQL和PHP之间的时区。
以下是页面:http://dev.feedingo.com/test_dates.php
在日期时间字段中使用NOW()在mySQL中创建日期。我试图弄清楚的最初问题是mySQL使用的时区以及如何与PHP同步。但现在有一个更奇怪的问题。
在我的测试应用中,如果您更改时区,第一个strtotime会正确更新,但如果将其传递给date()函数则不会更改。这是我根据选择框设置时区的方式。
$current_timezone = 'America/New_York';
if( isset( $_GET['timezone'] ) ) $current_timezone = $_GET['timezone'];
date_default_timezone_set($current_timezone);
为什么date()函数不接受时区更改的任何想法?谢谢!
答案 0 :(得分:0)
date()函数运行正常。
默认时区也会影响strtotime。
请注意,更改时区时,表中唯一更改的列是timestamp列。
您需要确定(或设置)mysql运行的时区。我建议使用UTC。
然后尝试以下方法之一:
尝试将时区部分添加到从mysql返回的日期字符串中:
//因为我们添加了一个时区部分,这将是UTC中的20:14:01。 $ actualTime = strtotime($ strDate);
这是一个可能有助于阐明的小脚本:
<?PHP
date_default_timezone_set('America/New_York');
$date = '2010-05-22 20:14:01'; //assume it's from mySQL, which is operating in UTC
echo strtotime($date) . ' ' . date('H:i:s', strtotime($date));
echo "\n";
echo strtotime($date.' -0000') . ' ' . date('H:i:s', strtotime($date . ' -0000'));
echo "\n";
输出如下:
1274573641 20:14:01
1274559241 16:14:01
第一行在美国/纽约运行strtotime(因为这是默认值)。
第二行在strtotime的输入中设置了明确的时区。
答案 1 :(得分:0)
试试这个。它的工作对我来说。
<?php
$time=39600;
$datetime = strtotime(date("h:i:s A"))+$time;
$datetime = date('D, d M', $datetime);
echo $datetime;
// $time obtained from table below:
// -25200|International Date Line (West) GMT-12|
// -21600|Midway Island, Samoa GMT-11|
// -18000|Hawaii, Honolulu GMT-10|
// -14400|Alaska GMT-9|
// -10800|Pacific Standard Time, US, Canada GMT-8|
// -7200|British Columbia N.E., Santa Fe, Mountain Time GMT-7|
// -3600|Central America, Chicago, Guatamala, Mexico City GMT-6|
// 0|US, Canada, Bogota, Boston, New York GMT-5|
// +3600|Canada, Santiago, Atlantic Standard Time GMT-4|
// +7200|Brazilia, Buenos Aires, Georgetown, Greenland GMT-3|
// +10800|Mid-Atlantic GMT-2|
// +14400|Azores, Cape Verde Is., Western Africa Time GMT-1|
// +18000|London, Iceland, Ireland, Morocco, Portugal GMT|
// +21600|Amsterdam, Berlin, Bern, Madrid, Paris, Rome, GMT+1|
// +25200|Athens, Cairo, Cape Town, Finland, Greece, Israel GMT+2|
// +28800|Ankara, Aden, Baghdad, Beruit, Kuwait, Moscow GMT+3|
// +32400|Abu Dhabi, Baku, Kabul, Tehran, Tbilisi, Volgograd GMT+4|
// +36000|Calcutta, Colombo, Islamabad, Madras, New Dehli GMT+5|
// +39600|Almaty, Dhakar, Kathmandu, Colombo, Sri Lanka GMT+6|
// +43200|Bangkok, Hanoi, Jakarta, Phnom Penh, Australia GMT+7|
// +46800|Taipei, Beijing, Hong Kong, Singapore, GMT+8|
// +50400|Seoul, Tokyo, Central Australia GMT+9|
// +54000|Brisbane, Canberra, Guam, Melbourne, Sydney, GMT+10|
// +57600|Magadan, New Caledonia, Solomon Is. GMT+11|
// +61200|Auckland, Fiji, Kamchatka, Marshall, Wellington, GMT+12|
?>