看到这个时间是不是觉得奇怪,这不是当前的时间,和我们北京时间差了8个小时。其实在我们打印这句话的时候,语言的警告已经告诉我们了。
这句话的大概意思就是告诉我们依赖系统的时区设置是不安全的,必须使用日期时区设置或者date_default_timezone_set()函数设置。默认是使用UTC时间(通用协调时间Universal Time Coodrdinated,缩写UTC),UTC时间与格林威治标准时间相同。
1、修改php.ini文件来修改时区设置
2、在应用程序中,使用时间日期函数之前添加如下函数:
参数timezone为php可识别的时区名称,如果时区名称无法识别,则系统采用UTC时间。可以在PHP手册中找到各时区的名称列表。我们国家的北京时间可以使用的时区包括:PRC(中华人民共和国)、Asia/Chongqing(重庆)、Asia/Shanghai(上海)、Asia/Urumqi(乌鲁木齐),这几个都是一样的。
这个方式适合将程序上传在空间中,不能修改php.ini文件,只能使用这种方式对时区进行设置。
mktime()函数将一个时间转换成UNIX时间戳
时间戳是一个长整数,包含了从unix纪元(1970年1月1日)到指定时间的秒数。参数是可以从右到左省略的。省略的参数将会被设置成本地日期和时间的当前值。
day:天数 year:年份数。可以是两位数或者四位数,0-69对应,70-100对应于
Is_dst:在夏令时可以被设置为1,如果不是则设置为0。如果不确定是否为夏令时则设置为-1(-1是默认值)
注意:有效的时间戳范围是格林威治时间1901年12月13日20时45分54秒到2038年1月19日3时14分7秒(此范围符合32位有符号整数的最小值和最大值)。在windows系统中中此范围限制为从1970年1月1日到2038年1月19日
time()函数也可以获取当前的unix时间戳,返回值是从unix纪元(格林威治时间1970年1月1日 00:00:00)到当前时间的秒数。
date() 函数返回参数timestamp按照指定格式format而产生的 字符串 。timestamp是可选的,省略就是使用当前时间。format就是指定的的日期、时间格式。这里先介绍几个时间日期的预定义变量。后面再介绍格式化。
函数返回数组形式的日期和时间信息,如果没有参数timestamp,则以当前时间为准。关联的数组元素说明如下:
mday:月份中的第几天。返回值范围1-31
wday:星期中的第几天,返回值范围0(表示星期日)- 6(表示星期六)
mon:月份数字,返回值范围1-12
year:4位数字表示的完整年份。
yday:一年中的第几天,返回值范围0-365
0:返回从unix纪元开始到当前时间的秒数
今天是一年中的第 33 天其中,month的有效值是1-12,day的有效值为当月的最大天数(1-31)(如1月是31天,2月如果是闰年为29天),year的有效值是1-32767 。
返回是布尔类型,表示该日期是否有效。true为有效,false为无效。
date()函数format的格式化选项如下面所示:
d – 一个月中的第几天(从 01 到 31)
D – 星期几的文本表示(用三个字母表示)
j – 一个月中的第几天,不带前导零(1 到 31)
l(’L’ 的小写形式)- 星期几的完整的文本表示
S – 一个月中的第几天的英语序数后缀(2 个字符:st、nd、rd 或 th。与 j 搭配使用)
z – 一年中的第几天(从 0 到 365)
W – 用 ISO-8601 数字格式表示一年中的星期数字(每周从 Monday[星期一]开始)
m – 月份的数字表示(从 01 到 12)
M – 月份的短文本表示(用三个字母表示)
n – 月份的数字表示,不带前导零(1 到 12)
t – 给定月份中包含的天数
L – 是否是闰年(如果是闰年则为 1,否则为 0)
Y – 年份的四位数表示
y – 年份的两位数表示
g – 12 小时制,不带前导零(1 到 12)
G – 24 小时制,不带前导零(0 到 23)
i – 分,带前导零(00 到 59)
s – 秒,带前导零(00 到 59)
I(i 的大写形式)- 日期是否是在夏令时(如果是夏令时则为 1,否则为 0)
O – 格林威治时间(GMT)的差值,单位是小时(实例:+0100)
T – 时区的简写(实例:EST、MDT)
Z – 以秒为单位的时区 偏移量 。UTC 以西时区的偏移量为负数(-43200 到 50400)
不同的国家和地区,有使用不同的时间,日期,货币和字符集。如西方国家使用Tuesday,我们国家表示星期四。
LC_ALL – 包括下面的所有的设置本地化规则
LC_CTYPE – 字符串分类和转换(例如所有字符大写或小写)
LC_TIME – 本地化环境的日期和时间格式
参数locale如果为空,就会使用系统环境变量的locale或者lang的值,否则就会应用locale参数所指定的本地化环境。如:en_US为美国本地化环境,chs则是简体中文,cht为繁体中文。
2、strftime()函数:根据本地化环境设置来格式化输出日期和时间
该函数返回指定的格式化字符串对参数timestamp进行格式化输出字符串。如果没有给出timestamp则用本地时间。月份,星期和其他语言相关的字符串写法和setlocale函数设置的当前区域有关。
参数format的转换标记如下:
%a – 星期几名称的简写
%A – 星期几名称的全称
%b – 月份名称的简写
%B – 月份名称的全称
%c – 首选的日期和时间表示法
%C – 表示世纪的数字(年份除以 100,范围从 00 到 99)
%d – 一个月中的第几天(01 到 31)
%e – 一个月中的第几天(1 到 31)
%g – 与 %G 表示法类似,但不带世纪
%p – 与给定的时间值相对应的 am 或 pm
%R – 24 小时制的时间标记法
%U – 当年包含的周数,从第一个星期日开始,作为第一周的第一天
%V – 当年包含的 ISO 8601 格式下的周数(01 到 53),week 1 表示当年的第一周,至少要有四天,且以星期一作为周的第一天
%W – 当年包含的周数,从第一个星期一开始,作为第一周的第一天
%w – 以十进制数形式表示一周中的某天,Sunday[星期日] = 0
%x – 首选的日期表示法,不带时间
%X – 首选的时间表示法,不带日期
%y – 不包含表示世纪的数字的年份表示(范围从 00 到 99)
%Y – 包含表示世纪的数字的年份表示
%Z 或 %z – 时区名称或简写
注意:本页面的编码格式是gb2312,所以繁体中文的日期是乱码,将编码格式改为big5,繁体中文将显示处理,但其他文字变成乱码了,可以自行修改查看。
可以将英文文本的日期和时间解析为unix时间戳,其值是相对于参数now给出的时间。如果没有提供参数,则使用系统当前时间。
如果参数time的格式是绝对时间,则now参数不起作用。如果是相对时间,则对应的时间就是参数now来提供的。如果解析失败返回false,在5.1之前的版本失败返回-1。
1、比较两个时间的大小
因为strtotime()函数返回的是时间戳格式,所以可以使用两个时间的时间戳就可以比较时间的大小。
离除夕还有“192”个小时说明:ceil()函数的格式为:float ceil(float value); 该函数为取整函数,返回不小于参数value值的最小整数。如果有小数部分,则进一位。应该注意的是函数的返回类型是float型,而不是int型。
该函数返回当前unix时间戳和微秒数。返回格式为msec sec的字符串。其中sec是当前unix时间戳,msec是微秒数。
explode()函数:根据指定字符分割字符串为数组
list() 函数:将数组中的值赋值给一些变量
sleep()函数:延迟几秒代码执行/睡眠几秒
这里只是大概介绍,参数说明可以详细看手册资料。
date_add() 添加日、月、年、时、分和秒到一个日期。
date_format() 返回根据指定格式进行格式化的日期。
date_parse_from_format() 根据指定的格式返回一个带有指定日期的详细信息的关联数组。
date_parse() 返回一个带有指定日期的详细信息的关联数组。
date_sub() 从指定日期减去日、月、年、时、分和秒。
date_sun_info() 返回一个包含有关指定日期与地点的日出/日落和黄昏开始/黄昏结束的信息的数组。
date_sunset() 返回指定日期与地点的日落时间。
idate() 格式化本地时间/日期为整数。
明天我们来看看PHP和Web页面中的使用