200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > UTC GMT 时区 时间戳

UTC GMT 时区 时间戳

时间:2023-12-14 08:21:05

相关推荐

UTC GMT 时区 时间戳

写脚本时经常遇到有关不同地方的服务器的时间同步问题,现整理一下以作备忘。

UTC: Universal Time Coordinated 协调世界时,又称世界标准时间

GMT: Greenwich Mean Time 格林尼治平均时

UTC和GMT都与英国伦敦的本地时相同,所以程序中UTC与GMT没什么不同。

时区:全球24个时区,把以伦敦为中心的世界地图展开,UTC和GMT的伦敦是0区,伦敦的右边直到新西兰的东部不远的斐济为东区,而左边到太平洋中间为西区。一般用5位时区差来表示与UTC相差的小时数,东区为正,西区为负。如北京时区是东八区,领先UTC八个小时,记为 +0800;纽约的时区是西五区,比UTC落后五个小时,记为 -0500。

UTC + 时区差 = 本地时间

时间戳:

PHP记为自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。PHP用time()函数来获得当前时间戳,用mktime来生成一个时间戳。

Javascript则精确到毫秒数。用dateObject.getTime()来获得当前时间戳,用Date.parse(datestring)来生成一个时间戳。

**纽约时间(-0500)和北京时间换算:

UTC + (-0500) = 纽约时间 (3)

UTC = 纽约时间 + 0500 (4)

把(2)式 - (4)式相比较,

UTC = 北京时间 - 0800 = 纽约时间 + 0500 (5)

即 北京时间 = 纽约时间 + 1300 (6)

即北京时间领先纽约时间十三个小时,由(6)式,

纽约时间 = 北京时间 - 1300 (7)

在四月下旬,纽约又换用夏令时,又称为日光节约时,比标准纽约时间提前一个小时,实际成为西四区的标准时间,成为 -0400。

UTC + (-0400) = 纽约夏令时,套用以上公式,

北京时间 = 纽约夏令时 + 1200

纽约夏令时 = 北京时间 - 1200

**电子邮件中的时间:

Email程序记录的是发信服务器本地RFC 822格式的时间,在电子邮件信头的Date域记为+0800:

Date: Fri, 08 Nov 2002 09:42:22 +0800

Date信头是可以修改的,所以平时可以看到垃圾邮件的时间是几十年前或后。

而像Outlook和Thunderbird会自动把UTC转换为本地时间,想要看真实时间的话要查看完整邮件头。

**把服务器上记录的时间转换为客户端本地时间

<?

/**

* 把如 -02-12 15:48:45 +0800 格式的时间转换为浏览者的本地时间

* 调用方法:

* <script language="JavaScript">calcLocaltime(<? echo themktime($tmptime); ?>, <? echo thezone($tmptime); ?>)</script>

*/

function themktime($datetime) { //把时间 -02-12 15:48:45 转换为时间戳

$hour = substr($datetime, 11, 2);

$min = substr($datetime, 14, 2);

$sec = substr($datetime, 17, 2);

$mon = substr($datetime, 5, 2);

$day = substr($datetime, 8, 2);

$year = substr($datetime, 0, 4);

$unixtime = mktime($hour, $min, $sec, $mon, $day, $year);

return $unixtime;

}

function thezone($datetime) { //提取时区小时差

$zone = substr($datetime, 20, 3);

return $zone;

}

?>

<script language="JavaScript">

function calcLocaltime(remotetime, offset) { //remotetime为服务器时间戳,offset为时区小时差

utc = remotetime * 1000 - offset * 3600 * 1000; //JS时间戳为毫秒,而PHP为秒,要作换算(*1000)

d = new Date();

nd = new Date(utc - ( 60000 * d.getTimezoneOffset() ) ); //注意: getTimezoneOffset = UTC - 本地时间,结果以分为单位;而一般时区差 = 本地时间 - UTC,以小时为单位

document.write(nd.toLocaleString());

}

</script>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。