在线的服务有世界各地的人来使用(若是有提供英文语系的话), 就有可能遇到需要帮世界各地的时区算时间.

要做个时区分布设置(ex: 台湾是 +8), 想要选取后, 自动秀出他的时间, 照理说就是现在时间 -8hr 即可(设置于台湾机器而言), 但是又想到机器可能会换, 程序还是该写好点才行, 于是花了点时间做研究.

本来想用

研究时找到两个 PHP function, 先记着, 之后可以搭配着用:

列出全部区域的名称 - timezone_abbreviations_list()

$timezone_identifiers = DateTimeZone::listIdentifiers();

print_r($timezone_identifiers);

?>

列出全部区域的名称、日光节约时间(DST)多久、离 UTC 差多久. - listAbbreviations()

$timezone_abbreviations = DateTimeZone::listAbbreviations();

print_r($timezone_abbreviations);

?>

借由这次研究, 特别是 GMT / UTC 等时间, 靠下述两篇 Wikipedia 的文章, 观念也清楚不少.

名词解释

UTC: Coordinated Universal Time 协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。

GMT: Greenwich Mean Time 格林威治标准时间,例如台北为 GMT + 8 就是台北的时区为格林威治标准时间 + 8 个小时。

DST: Daylight Saving Time 就是指该地区正在施行日光节约的夏令时间,也就是当地标准时间 + 1 个小时。

于是, 要算当地时间的话, 需要先在取得机器的 UTC 时间, 再去换算成当地时间就可以了.

以台湾地区为例, 要取得 UTC 的时差:

测试: 运行 gmmktime(0, 0, 0, 1, 1, 1970) 得到 0, 再运行 mktime(0, 0, 0, 1, 1, 1970) 得到 -28800 = -8hr.

现在机器在台湾, 但是台湾的时区(Time zone)比 UTC 时间快 8小时, 所以上面 mktime(0, 0, 0, 1, 1, 1970); 会是 -8hr.

程序:

echo gmmktime(0, 0, 0, 1, 1, 1970); // 0

echo mktime(0, 0, 0, 1, 1, 1970); // -28800secs = -8hr

?>

将相关的 PHP function 都拿来测试, 测取得 UTC 的方法, 有下述这几类. (最下面那栏 UTC 是错误的)

echo "======================\n";

echo 'UTC 1970: ' . gmmktime(0, 0, 0, 1, 1, 1970) . "\n"; // 0

echo 'TW 1970: ' . mktime(0, 0, 0, 1, 1, 1970) . "\n"; // -28800secs = -8hr

echo "======================\n";

$t = time() + mktime(0, 0, 0, 1, 1, 1970);

echo 'UTC Timestamp: ' . $t . "\n"; // 1236129510

echo 'TW Timestamp: ' . time() . "\n"; // 1236158310

echo "======================\n";

// gmstrftime("%b %d %Y %H:%M:%S", mktime(date('H,i,s,n,j,Y')));

echo 'UTC: ' . gmstrftime("%b %d %Y %H:%M:%S") . "\n"; // UTC: Mar 04 2009 09:08:47

echo 'TW: ' . strftime("%b %d %Y %H:%M:%S") . "\n"; // TW: Mar 04 2009 17:08:47

echo "======================\n";

echo 'UTC: ' . date('Y-m-d H:i:s', time() + mktime(0, 0, 0, 1, 1, 1970)) . "\n"; // UTC: 2009-03-04 09:08:47

echo 'TW: ' . date('Y-m-d H:i:s') . "\n"; // TW: 2009-03-04 17:08:47

echo "======================\n";

echo 'UTC: ' . date('Y-m-d H:i:s', gmmktime(date('H, i, s, n, j, Y'))) . " - error\n"; // UTC: 2009-03-05 01:08:47

echo 'TW: ' . date('Y-m-d H:i:s', mktime(date('H, i, s, n, j, Y'))) . "\n"; // TW: 2009-03-04 17:08:47

echo "======================\n";

?>

由上述可得到, 要取得 UTC 的时间, 用此方法运算即可: time() + mktime(0, 0, 0, 1, 1, 1970);

于是写两个 Function 来做, 取得 UTC 时间 和 传入地区时间, 算出当地时间(此 function 并未考虑 DST 的时间).

function get_utc_timestamp()

{

return time() + mktime(0, 0, 0, 1, 1, 1970);

}

function get_timestamp_from_timezone($tz_offset = 0)

{

if ($tz_offset > 14 || $tz_offset < -12)

$tz_offset = 0; // timezone offset range: -12 ~ 14

return time() + mktime(0, 0, 0, 1, 1, 1970) + ($tz_offset * 60 * 60);

}

/* Test */

echo 'UTC: ' . date('Y-m-d H:i:s', get_timestamp_from_timezone()) . "\n";

echo 'TW: ' . date('Y-m-d H:i:s', get_timestamp_from_timezone(8)) . "\n";

echo '-8: ' . date('Y-m-d H:i:s', get_timestamp_from_timezone(-8)) . "\n";

?>

世界时间 测试对照

下述网站有时区对照, 可以知道世界各地目前时间, 再借此跟上述程序去做些比对啰~

php查找时间,PHP 查找并算出世界各地时间相关推荐

  1. 超级计算机计算足球比赛,超级计算机算出世界前50足球俱乐部:曼城排名第1,欧冠冠军仅第3...

    原标题:超级计算机算出世界前50足球俱乐部:曼城排名第1,欧冠冠军仅第3 谁是目前全球最好的俱乐部?关于这个问题,很多球迷都有自己的看法.在这个信息时代,数据可以说明很多问题.当然,数据也可以用来评估 ...

  2. vue,uni-app算出两个时间相差的天数

    此方法只匹配天数,如果要带时分秒的间隔可以自行完善,最后return出去即可 sDate1=开始时间sDate2=对比时间//算相隔天数DateDiff(sDate1, sDate2) {var aD ...

  3. php 日期时间操作-可算出几天后的时间

    来源:http://www.phpnewer.com/index.php/Cjwt/detail/id/421.html -------------------- 本文为大家介绍一下根据PHP时间戳获 ...

  4. java中怎么通过日期算出天数_Java如何通过计算两个日期的时间差来算出天数

    Java如何通过计算两个日期的时间差来算出天数,年月日,天数,时间,退房,时分 Java如何通过计算两个日期的时间差来算出天数 易采站长站,站长之家为您整理了Java如何通过计算两个日期的时间差来算出 ...

  5. 什么用计算机算出自己在世界上活.了几天,据说科学家发现了一个“寿命计算器”,来算一下自己能活多久?...

    原标题:据说科学家发现了一个"寿命计算器",来算一下自己能活多久? 为什么有的人能活到100岁? 为什么有的人却早早离世? 到底是什么影响着我们的寿命? 据生命时报,美国坦普尔大学 ...

  6. 一组数字中算出最相近的组合_机器学习有意思! 世界上最简单的机器学习入门...

    你是否也曾听人们谈起机器学习但是只有一个朦胧的概念?你是否厌倦了在同事的高谈阔论中颓然欲睡?此诚求变之机. 本教程适合所有对机器学习感到好奇,却不知从何下手的读者.我想应该有很多人试着读了维基百科页面 ...

  7. AI算法 真的能算出人类的欲望吗?

    https://www.toutiao.com/a6686069891713221132/ 假期里,闲着也是闲着,我们聊点烧脑的话题. 以前,我给一家朋友的机器人公司写过一个<AI时代的爱情&g ...

  8. sql 算出下级销售总和_找出总和字符串

    sql 算出下级销售总和 Description: 描述: This is a standard interview problem to check that the given string is ...

  9. 怎样用计算机算出圆周率,古代没有计算机的时代 祖冲之是如何算出圆周率的...

    原标题:古代没有计算机的时代 祖冲之是如何算出圆周率的 今天趣历史小编就给大家带来祖冲之的文章,希望能对大家有所帮助. 祖冲之,提起这个名字大家首先想到的就是圆周率,因为,圆周率是祖冲之的代表性成果. ...

最新文章

  1. 附录G Netty与NettyUtils
  2. python各个绘图的作用,深度讲解Python四大常用绘图库的“绘图原理”
  3. 【经典干货】GitHub标星10万+,史上最强Google面试指南!
  4. win7系统连接2003服务器时快时慢,win7/win8/win10访问Windows2003和XP共享慢的解决方法【图文教程】...
  5. java内存溢出排查jstack_Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)
  6. $(document).ready() 和 window.onload 方法比较
  7. WindowsXP命令行修改服务启动选项
  8. VSRE的完整形式是什么?
  9. 游戏云平台怎么开发_百度“云手机”与咪咕快游共建国内最大云游戏平台
  10. 单片机脉冲喷吹仪c语言,C51单片机脉冲累加器(C语言程序)
  11. win10 如何设置眼睛保护色(绿色)
  12. 补天漏洞厂商资产数据爬虫以及总漏洞量可视化分析
  13. 苏宁大数据怎么运营_苏宁大数据离线任务开发调度平台实践
  14. python计算复数的辐角,(Python 3)1051复数乘法(15分),python31051
  15. spire.doc操作word文档工具类(自用)
  16. C#通过函数名字符串执行相应的函数
  17. python提取字符串括号里的内容
  18. 直击痛点!有讲究的品质生活好物件,不再让你“家徒四壁”...丨钛空舱
  19. uniapp输入框弹起软键盘顶起页面
  20. 湖南计算机本科,湖南搞计算机科学与技术的本科有哪些?

热门文章

  1. 如何用python生成软件_python中的生成器函数是如何工作的?
  2. 小余学调度:学习记录(2022.4)
  3. JAVA排序算法之插入排序
  4. wxWidgets:wxSplashScreen 示例
  5. wxWidgets:wxScrollBar类用法
  6. wxWidgets:wxFileCtrlEvent类用法
  7. wxWidgets:wxColourDatabase类用法
  8. boost::base_from_member相关的测试程序
  9. 使用 BOOST.ASSERT 机制替换库断言
  10. boost::hana::insert用法的测试程序