如何让php显示本地时间2007-09-10 07:53许多编程的朋友在使用php中的date()函数时,显示出来的时间都与本地时间不一样。那是因为PHP5默认为格林威治时间,与北京时间相差8个小时。
从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 去掉前面的分号= 后面加XXX,重启http服务(如apache2或iis等)即可。
关于XXX,大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore
其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC
注:PRC是中华人民共和国
解决方式
/*********************************************************************************
在页头使用date_default_timezone_set()设置我的默认时区为北京时间
date_default_timezone_set('PRC');
echo date('Y-m-d H:i:s');
*********************************************************************************/
PHP其它时间相关函数
/*********************************************************************************
mktime — 取得一个日期的 UNIX 时间戳
int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
time — 返回当前的 UNIX 时间戳(格林威治时间 1970 年 1 月 1 日 00:00:00)
int time ( void )
date — 格式化一个本地时间/日期
string date ( string format [, int timestamp] )
format 字符说明
a 小写的上午和下午值 am 或 pm
A 大写的上午和下午值 AM 或 PM
d 月份中的第几天,有前导零的 2 位数字 01 到 31
D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun
F 月份,完整的文本格式,例如 January 或者 March January 到 December
g 小时,12 小时格式,没有前导零 1 到 12
G 小时,24 小时格式,没有前导零 0 到 23
h 小时,12 小时格式,有前导零 01 到 12
H 小时,24 小时格式,有前导零 00 到 23
i 有前导零的分钟数 00 到 59>
j 月份中的第几天,没有前导零 1 到 31
l(“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
m 数字表示的月份,有前导零 01 到 12
M 三个字母缩写表示的月份 Jan 到 Dec
n 数字表示的月份,没有前导零 1 到 12
s 秒数,有前导零 00 到 59>
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
Y 4 位数字完整表示的年份 例如:1999 或 2003
y 2 位数字表示的年份 例如:99 或 03
gmmktime — 取得 GMT 日期的 UNIX 时间戳
int gmmktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
和 mktime() 完全一样,只除了返回值是格林威治标准时的时间戳。参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。
注: 在 Microsoft Windows 系列的操作系统中实现本函数的系统库是坏的
gmdate — 格式化一个 GMT/UTC 日期/时间
string gmdate ( string format [, int timestamp] )
同 date() 函数完全一样,只除了返回的时间是格林威治标准时(GMT)。例如当在中国(GMT +0800)运行以下程序时,第一行显示“Jan 01 2000 00:00:00”而第二行显示“Dec 31 1999 16:00:00”。
注: 在 Microsoft Windows 系列的操作系统中实现本函数的系统库是坏的
strftime –
根据区域设置格式化本地时间/日期
string strftime ( string format [, int timestamp] )
返回用给定的格式字串对给出的 timestamp 进行格式输出后的字符串。如果没有给出时间戳则用当前的本地时间。月份和星期几以及其它和语言有关的字符串写法和用 setlocale() 设定的当前的区域有关。
格式字串能识别下列转换标记:
%a – 当前区域星期几的简写
%A – 当前区域星期几的全称
%b – 当前区域月份的简写
%B – 当前区域月份的全称
%c – 当前区域首选的日期时间表达
%C – 世纪值(年份除以 100 后取整,范围从 00 到 99)
%d – 月份中的第几天,十进制数字(范围从 01 到 31)
%D – 和 %m/%d/%y 一样
%e – 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ‘ 1′ 到 ‘31′)
%g – 和 %G 一样,但是没有世纪
%G – 4 位数的年份,符合 ISO 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。
%h – 和 %b 一样
%H – 24 小时制的十进制小时数(范围从 00 到 23)
%I – 12 小时制的十进制小时数(范围从 00 到 12)
%j – 年份中的第几天,十进制数(范围从 001 到 366)
%m – 十进制月份(范围从 01 到 12)
%M – 十进制分钟数
%n – 换行符
%p – 根据给定的时间值为 `am’ 或 `pm’,或者当前区域设置中的相应字符串
%r – 用 a.m. 和 p.m. 符号的时间
%R – 24 小时符号的时间
%S – 十进制秒数
%t – 制表符
%T – 当前时间,和 %H:%M:%S 一样
%u – 星期几的十进制数表达 [1,7],1 表示星期一
%U – 本年的第几周,从第一周的第一个星期天作为第一天开始
%V – 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
%W – 本年的第几周数,从第一周的第一个星期一作为第一天开始
%w – 星期中的第几天,星期天为 0
%x – 当前区域首选的时间表示法,不包括时间
%X – 当前区域首选的时间表示法,不包括日期
%y – 没有世纪数的十进制年份(范围从 00 到 99)
%Y – 包括世纪数的十进制年份
%Z – 时区名或缩写
%% – 文字上的 `%’ 字符
gmstrftime –
根据区域设置格式化 GMT/UTC 时间/日期
string gmstrftime ( string format [, int timestamp] )
和 strftime() 的行为相同,只除了返回时间是格林威治标准时(GMT)。
strtotime –
将任何英文文本的日期时间描述解析为 UNIX 时间戳
int strtotime ( string time [, int now] )
本函数预期接受一个包含英文日期格式的字符串并尝试将其解析为 UNIX 时间戳。如果 time 的格式是绝对时间则 now 参数不起作用。如果 time 的格式是相对时间则其所相对的时间由 now 提供,或者如果未提供 now 参数时用当前时间。失败时返回 -1
*********************************************************************************/