MENU

php获得当前时间,并消除时差......

June 10, 2008 • 网络技术

下午和风吟瞎聊~不知怎么了到了~他做的一插件~复制文章自动带上版权的~以前不知道是他做的~那插件一直有个问题~时间不对~这是我叫他试试复制了再发给我的的~

引用

2008-06-09 18:04:32 风吟╰☆
的山顶--大平头,可以空降,它离汶川县城只有7公里,

该文章出自《Jevin's Blog》,原文链接:http://www.cnjevin.com/post/39/

转载时间是: 2008-06-09 09:55:32 请保留此链接,谢谢!

QQ上显示的是当前时间~那个转载时间和当前时间误差严重~[break]于是~跟风吟反映这一问题~他的回答是:

2008-06-09 18:04:55 风吟╰☆
我故意的

2008-06-09 18:05:10 Jevin
09:55:32
很明显的错误~

2008-06-09 18:05:14 Jevin
故意的???

2008-06-09 18:05:48 风吟╰☆
每个人的服务器不同

2008-06-09 18:05:50 风吟╰☆
时间错误

2008-06-09 18:05:59 风吟╰☆
因为这是世界标准时间

2008-06-09 18:06:03 风吟╰☆
中国在第8区

然后~我要求他做一个中国时间的给我~他给我一个网址(http://www.baidu.com/s?ie=gb2312&bs=php%BB%F1%B5%C3%CF%D6%D4%DA%CA%B1%BC%E4&sr=&z=&cl=3&f=8&wd=php%BB%F1%B5%C3%B5%B1%C7%B0%CA%B1%BC%E4&ct=0)~然后~竟然要我自己动手~晕了~偶郁闷~

没办法~于是~找到他那插件~挨个看了看~"copy.php"里面有个JS调用的~调的根目录下"copyjs.php"~目标说定~就是这个copyjs了~打开一看~有段获取当前时间的代码

<?php
echo $nowtime=date("Y-n-j H:i:s");
?>

根据网上搜索到的资料来看~这段代码和时区无关~
又继续找~在网上找到一句:

date_default_timezone_set('Asia/Shanghai');//此句用于消除时间差

拿来加到了风吟那个时间获取代码之前~结果还是不对~看到"Asia/Shanghai"这地名~于是又跑去php官方(http://www.php.net/manual/en/timezones.php)查了一下~大陆可用的值有:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)
挨着实验~全都不对~郁闷了~
问风吟~他说这代码没用~叫我继续找~我继续郁闷~
于是继续~一番查找之后~找到另一段代码~

$timeoffset = 8;
echo gmdate("Y-m-d h:i:s", mktime() + $timeoffset * 3600);

其中gmdate()函数返回的是GMT(格林威治)时间,$timeoffset是各地的时差。8是北京时间和GMT的时差。

拿来一试~居然还是有近10分钟的误差~郁闷到无与伦比~这时候风吟又来看热闹~我发过去问他~他说~对了~就是这代码~误差是因为服务器慢了~我无语~早知道~我早就弄好了~就因为那10分钟误差无法消除~我还研究了半天~
于是~获取中国时间的复制自带版权插件完成了~

附搜索到的相关东东整理:

1.PHP获得当前时间的方法

引用

使用函式 date() 实现

<?php
date_default_timezone_set('Asia/Shanghai');//此句用于消除时间差
echo $nowtime=date("Y-n-j H:i:s");
?>

显示的格式: 年-月-日 小时:分钟:妙

相关时间参数:

a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"

可以自由设定显示的内容,连接符号或是显示位置,例如 date("m-d H") 或者date("dmY");?>等.

2.出现时差的解决办法

引用
可以使用如下代码:

<?php
$timeoffset = 8;
echo gmdate("Y-m-d H:i:s", mktime() + $timeoffset * 3600);
//gmdate()函数返回的是GMT(格林威治)时间,$timeoffset是各地的时差。8是北京时间和GMT的时差。
?>

还有~从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的
也就是显示的时间(无论用什么php命令)都是格林威治标准时间
和我们的时间(北京时间)差了正好8个小时,有以下3中方法可以恢复正常的时间。
1,最简单的方法就是不要用php5.1以上的版本
2,如果一定要用,而且不能修改php.ini,则需要在关于时间的初始化的语句的
上面加上 date_default_timezone_set (XXX);
3,一劳永逸,仅限能修改php.ini。打开php.ini查找date.timezone 去掉前面的分号
= 后面加PRC,重启http服务(如apache2或iis等)即可
关于2那个括号中的XXX可以去php官方查,地址:http://www.php.net/manual/en/timezones.php

Last Modified: May 15, 2022
Archives QR Code Tip
QR Code for this page
Tipping QR Code