PHP 实现的静态世界时钟功能

昨天有个博友的网站上需要加上显示世界时钟的功能,于是向我求助,因为是用在 WordPress 主题上的,所以要用 PHP 来实现,硬着头皮答应了下来。不过说实话,我的 PHP 水平还不如我的英语水平,就是只会看不会写的那种,Wordpress 主题以内的一些 PHP 函数我还算比较熟悉,但是 WordPress 以外的 PHP 我就有些傻眼了,每次写 PHP 都是咬着笔头,翻着 PHP 手册,搜着 Google,挤牙膏一样才挤出那么一点东西。

关于这个世界时钟的功能,原理上是很简单的,只要设置一个基准的默认时间,然后把其他地区的时间加上时间差就可以了,但是用什么函数呢?翻呀翻,搜呀搜,终于被我搞定了,贴出来留个纪念。先看 DEMO

以下是世界时钟完整的 PHP 代码:

<?php
//设置默认时区
date_default_timezone_set('Etc/GMT-8');
//当地时间,即北京时间
$localtime = date('Y-m-d H:i:s');
//伦敦时间
$london = date('Y-m-d H:i:s',strtotime("-8 hours $localtime"));
//柏林时间
$berlin = date('Y-m-d H:i:s',strtotime("-7 hours $localtime"));
//开罗时间
$cairo = date('Y-m-d H:i:s',strtotime("-6 hours $localtime"));
//莫斯科时间
$moscow = date('Y-m-d H:i:s',strtotime("-5 hours $localtime"));
//新德里时间
$newdelhi = date('Y-m-d H:i:s',strtotime("-3 hours $localtime"));
//曼谷时间
$bangkok = date('Y-m-d H:i:s',strtotime("-1 hours $localtime"));
//东京时间
$tokyo = date('Y-m-d H:i:s',strtotime("+1 hours $localtime"));
//悉尼时间
$sydney = date('Y-m-d H:i:s',strtotime("+2 hours $localtime"));
echo '伦敦时间:' . $london. '<br />';
echo '柏林时间:' . $berlin. '<br />';
echo '开罗时间:' . $cairo. '<br />';
echo '莫斯科时间:' . $moscow. '<br />';
echo '新德里时间:' . $newdelhi. '<br />';
echo '曼谷时间:' . $bangkok. '<br />';
echo '北京时间:' . $localtime. '<br />';
echo '东京时间:' . $tokyo. '<br />';
echo '悉尼时间:' . $sydney. '<br />';
?>

看代码还是很好理解的,但是却花了我近一个小时来研究时间函数,才写出这么几行。尤其是这个 date_default_timezone_set() 函数,刚开始我没有写这个函数,输出的时间和实际时间相差了8个小时,我想那一定是时区的问题了,一查果然如此。因为北京时间是东8区的,而从 php5.1.0 开始,php.ini 里加入了 date.timezone 这个选项,默认情况下关闭的,也就是显示的时间都是格林威治标准时间(GMT),这和我们的北京时间正好相差8小时。

这样就做好了,看着自己的成果,还算不错,哈哈~不过有些遗憾,这个 PHP 实现的时钟只是静态的,只有刷新页面才能更新时钟,如果可以动态实时的显示世界时钟的功能就更完美了,不过动态的应该需要 Javascript 脚本的配合使用吧,这个更高级了,我还不会。不知道有没有现成的世界时钟的 API 可以调用呢?这样也免去了自己写代码的麻烦。

今天算是小有收获,又学会了一个 PHP 函数,另外感谢所有向我提问的童鞋,是你们给了我一个折腾的目标。

  1. 有没有见过EXCEL制作的时钟咧,请看-运用Excel散点图 制作时钟 教程-(url-http://surda.cn/2010/07/excel-clock-by-scatter-diagram/)

  2. :mrgreen: 时区确实是麻烦事,以前服务器在国内也就没管过,现在用国外空间,导致时区也成为一个小问题。有了楼主此文章,我又可以节约一点脑细胞了,哈哈

  3. 万戈你该修修你博客了,速度变慢了,而且我发评论的时候,老是发布上去,提交后下面显示一个红X, :mad: