如何将php日期格式转换为GMT,反之亦然?
Posted
技术标签:
【中文标题】如何将php日期格式转换为GMT,反之亦然?【英文标题】:how to convert php date formats to GMT and vice versa? 【发布时间】:2011-07-24 05:03:01 【问题描述】:我是 php 新手。 我想编写一个函数,我需要用户以任何日期格式(包括 DST)输入日期,输入 GMT 格式,然后再输入原始输入格式。请任何人帮助我。
【问题讨论】:
阅读 date 的 php 手册以及那里给出的示例 【参考方案1】:虽然 gmdate 函数可用。如果您使用的是 PHP 5.2 或更高版本,请考虑使用 DateTime 对象。
这里是切换到 GMT 的代码
$date = new DateTime();
$date->setTimezone(new DateTimeZone('GMT'));
然后回到默认时区...
$date = new DateTime('2011-01-01', new DateTimeZone('GMT'));
$date->setTimezone(new DateTimeZone(date_default_timezone_get()));
使用 DateTime 对象可以让您创建一个日期时间,就像过程函数一样,除了您保留对实例的引用。
例如
// Get a reference to Christmas of 2011, at lunch time.
$date = new DateTime('2011-12-25 13:00:00');
// Print the date for people to see, in whatever format we specify.
echo $date->format('D jS M y');
// Change the timezone to GMT.
$date->setTimezone(new DateTimeZone('GMT'));
// Now print the date/time it would in the GMT timezone
// as opposed to the default timezone it was created with.
echo $date->format('Y-m-d H:i:s');
// Just to show of some more, get the previous Sunday
$date->modify('previous Sunday');
您可以使用很多函数,它们比程序函数更具可读性。
从时区转换为 GMT 的显式示例
$melbourne = new DateTimeZone('Australia/Melbourne');
$gmt = new DateTimeZone('GMT');
$date = new DateTime('2011-12-25 00:00:00', $melbourne);
$date->setTimezone($gmt);
echo $date->format('Y-m-d H:i:s');
// Output: 2011-12-24 13:00:00
// At midnight on Christmas eve in Melbourne it will be 1pm on Christmas Eve GMT.
echo '<br/>';
// Convert it back to Australia/Melbourne
$date->setTimezone($melbourne);
echo $date->format('Y-m-d H:i:s');
从亚洲/加尔各答到美国/纽约
date_default_timezone_set('Asia/Kolkata');
$date = new DateTime('2011-03-28 13:00:00');
$date->setTimezone(new DateTimeZone('America/New_York'));
echo $date->format("Y-m-d H:i:s");
//Outputs: 2011-03-28 03:30:00
【讨论】:
谢谢 jcob ......但是请你能发布一些例子它是如何工作的............ 非常感谢你 jcob ......但我在这里感到困惑............你的例子将如何帮助我解决我的问题......?? @0001 在我的前 2 个代码 sn-ps 中。第一个使用默认时区(在 php.ini 或 date_default_timezone_set() 中设置)为当前时间创建一个 DateTime 实例,并将其转换为 GMT。然后您可以使用$date->format()
回显它。第二个 sn -p 在 GMT 中创建一个 DateTime 实例,并将其转换为默认时区。
嘿 jcob ......我试过你的代码......我得到 '2011-12-24 13:00:00' 作为 GMT 转换2011-12-25 00:00:00' 对于原始日期格式,我使用 date_default_timezone_set('Australia/Melbourne');我得到 2011-01-01 11:00:00 作为原始数据。在这里感到困惑。
@0001 仅使用最后一个代码 sn-p,它转换为 GMT 输出 2011-12-24 13:00:00,然后转换回墨尔本...输出 2011-12-25 00 :00:00。【参考方案2】:
使用gmdate function 转换为格林威治标准时间。
例如
$d = '2011-03-28 12:05:20';
$gmt = gmdate('Y-m-d H:i:s',strtotime($d));
【讨论】:
当我给出像 '2013-07-03 16:00 IST' 这样的日期时,我的日期是错误的【参考方案3】:// 将本地时间转换为gmt
public function convertTime($timezone,$time)
$selectedtime = date("Y-m-d H:i",strtotime($time));
$date = new DateTime($selectedtime, new DateTimeZone($timezone));
$date->setTimezone(new DateTimeZone('GMT'));
$convertedtime = strtotime($date->format('Y-m-d H:i'));
return $convertedtime;
【讨论】:
以上是关于如何将php日期格式转换为GMT,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MQ 的 esql 将日期的特定时区转换为 GMT 时区?