<?php$date = date("Y-m-d H:i:s");echo $date;?>输出结果:2021-02-03 01:27:47
看到这个韶光是不是以为奇怪,这不是当前的韶光,和我们北京韶光差了8个小时。其实在我们打印这句话的时候,措辞的警告已经见告我们了。
It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. In。
这句话的大概意思便是见告我们依赖系统的时区设置是不屈安的,必须利用日期时区设置或者date_default_timezone_set()函数设置。默认是利用UTC韶光(通用折衷韶光Universal Time Coodrdinated,缩写UTC),UTC韶光与格林威治标准韶光相同。
1、修正php.ini文件来修正时区设置
找到php安装目录下的php.ini文件,找到[date]下的“;date.timezone=”选项,将其修正为“date.timezone=Asia/Hong_Kong”,然后重启apache 做事器。
2、在运用程序中,利用韶光日期函数之前添加如下函数:
date_default_timezone_set(timezone);
参数timezone为php可识别的时区名称,如果时区名称无法识别,则系统采取UTC韶光。可以在PHP手册中找到各时区的名称列表。我们国家的北京韶光可以利用的时区包括:PRC(中华公民共和国)、Asia/Chongqing(重庆)、Asia/Shanghai(上海)、Asia/Urumqi(乌鲁木齐),这几个都是一样的。
这个办法适宜将程序上传在空间中,不能修正php.ini文件,只能利用这种办法对时区进行设置。
<?phpdate_default_timezone_set("Asia/Shanghai");$date = date("Y-m-d H:i:s");echo $date;?>输出结果:2021-02-03 09:30:15
1、得到本地化韶光戳
mktime()函数将一个韶光转换成UNIX韶光戳
语法格式:int mktime(int hour,int minute,int second,int month,int day,int year,[int is_dst]);
韶光戳是一个长整数,包含了从unix纪元(1970年1月1日)到指定时间的秒数。参数是可以从右到左省略的。省略的参数将会被设置成本地日期和韶光确当前值。
hour:小时数 minute:分钟数
second:秒数(1分钟之内) month:月份数
day:天数 year:年份数。可以是两位数或者四位数,0-69对应2000-2069,70-100对应于1970-2000
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日
<?php$date = mktime();echo "当前韶光戳:".$date;echo "<br/>";echo "当前日期:".date("Y-m-d",$date);echo "<br/>";echo "当前韶光:".date("H:i:s",$date);?>输出结果:当前韶光戳:1612318185当前日期:2021-02-03当前韶光:10:09:45
2、获取当前韶光戳
time()函数也可以获取当前的unix韶光戳,返回值是从unix纪元(格林威治韶光1970年1月1日 00:00:00)到当前韶光的秒数。
语法格式:int time(void);
<?php$date = time();echo "当前韶光戳:".$date;echo "<br/>";$date2 = $date + (1246060);echo "本日日期:".date("Y-m-d",$date);echo "<br/>";echo "来日诰日日期:".date("Y-m-d",$date2);echo "<br/>";?>输出结果:当前韶光戳:1612318730 本日日期:2021-02-03 来日诰日日期:2021-02-04
三、获取当前日期和韶光
语法格式:date(string format,[int timestamp]);
date() 函数返回参数timestamp按照指定格式format而产生的字符串。timestamp是可选的,省略便是利用当前韶光。format便是指定的的日期、韶光格式。这里先先容几个韶光日期的预定义变量。后面再先容格式化。
DATE_ATOM:原子钟格式
DATE_COOKIE:HTTP Cookies格式
DATE_RSS:RSS格式
DATE_ISO8601:ISO-8601格式
DATE_W3C:World Wide Web Consortium格式
DATE_RFC850:RFC850格式
DATE_RFC822:RFC822格式
<?phpecho "<p> DATE_ATOM: ".date(DATE_ATOM);echo "<p> DATE_COOKIE: ".date(DATE_COOKIE);echo "<p> DATE_RSS: ".date(DATE_RSS);echo "<p> DATE_ISO8601: ".date(DATE_ISO8601);echo "<p> DATE_W3C: ".date(DATE_W3C);echo "<p> DATE_RFC850: ".date(DATE_RFC850);echo "<p> DATE_RFC822: ".date(DATE_RFC822);?>输出结果:DATE_ATOM: 2021-02-03T10:33:17+08:00DATE_COOKIE: Wednesday, 03-Feb-2021 10:33:17 CSTDATE_RSS: Wed, 03 Feb 2021 10:33:17 +0800DATE_ISO8601: 2021-02-03T10:33:17+0800DATE_W3C: 2021-02-03T10:33:17+08:00DATE_RFC850: Wednesday, 03-Feb-21 10:33:17 CSTDATE_RFC822: Wed, 03 Feb 21 10:33:17 +0800
四、获取日期和韶光信息
语法格式:array getdate(int timestamp);
函数返回数组形式的日期和韶光信息,如果没有参数timestamp,则以当前韶光为准。关联的数组元素解释如下:
seconds:秒,返回值范围0-59
minutes:分钟,返回值范围0-59
hours:小时,返回值范围0-23
mday:月份中的第几天。返回值范围1-31
wday:星期中的第几天,返回值范围0(表示星期日)- 6(表示星期六)
mon:月份数字,返回值范围1-12
year:4位数字表示的完整年份。
yday:一年中的第几天,返回值范围0-365
weekday:星期几的完全文本表示,返回值范围为Sunday-Saturday
month:月份的完全文本表示,返回值范围为January - December
0:返回从unix纪元开始到当前韶光的秒数
<?php$arr = getdate();echo "本日是:$arr[year]-$arr[mon]-$arr[mday]";echo "<br/>";echo " $arr[hours]:$arr[minutes]:$arr[seconds] $arr[weekday] ";echo "<br/>";echo "本日是一年中的第 $arr[yday] 天";?>输出结果:本日是:2021-2-3 10:50:44 Wednesday 本日是一年中的第 33 天
语法格式:bool checkdate(int month,int day,int year);
个中,month的有效值是1-12,day的有效值为当月的最大天数(1-31)(如1月是31天,2月如果是闰年为29天),year的有效值是1-32767 。
返回是布尔类型,表示该日期是否有效。true为有效,false为无效。
<?phpvar_dump(checkdate(2,28,2021));echo "<br/>";var_dump(checkdate(2,29,2021));echo "<br/>";var_dump(checkdate(2,30,2021));echo "<br/>";var_dump(checkdate(2,31,2021));?>输出结果:bool(true) bool(false) bool(false) bool(false)
六、格式化日期和韶光
date()函数format的格式化选项如下面所示:
d - 一个月中的第几天(从 01 到 31)
D - 星期几的文本表示(用三个字母表示)
j - 一个月中的第几天,不带前导零(1 到 31)
l('L' 的小写形式)- 星期几的完全的文本表示
N - 星期几的 ISO-8601 数字格式表示(1 表示 Monday[星期一],7 表示 Sunday[星期日])
S - 一个月中的第几天的英语序数后缀(2 个字符:st、nd、rd 或 th。与 j 搭配利用)
w - 星期几的数字表示(0 表示 Sunday[星期日],6 表示 Saturday[星期六])
z - 一年中的第几天(从 0 到 365)
W - 用 ISO-8601 数字格式表示一年中的星期数字(每周从 Monday[星期一]开始)
F - 月份的完全的文本表示(January[一月份] 到 December[十仲春份])
m - 月份的数字表示(从 01 到 12)
M - 月份的短文本表示(用三个字母表示)
n - 月份的数字表示,不带前导零(1 到 12)
t - 给定月份中包含的天数
L - 是否是闰年(如果是闰年则为 1,否则为 0)
o - ISO-8601 标准下的年份数字
Y - 年份的四位数表示
y - 年份的两位数表示
a - 小写形式表示:am 或 pm
A - 大写形式表示:AM 或 PM
B - Swatch Internet Time(000 到 999)
g - 12 小时制,不带前导零(1 到 12)
G - 24 小时制,不带前导零(0 到 23)
h - 12 小时制,带前导零(01 到 12)
H - 24 小时制,带前导零(00 到 23)
i - 分,带前导零(00 到 59)
s - 秒,带前导零(00 到 59)
u - 微秒(PHP 5.2.2 中新增的)
e - 时区标识符(例如:UTC、GMT、Atlantic/Azores)
I(i 的大写形式)- 日期是否是在夏令时(如果是夏令时则为 1,否则为 0)
O - 格林威治韶光(GMT)的差值,单位是小时(实例:+0100)
P - 格林威治韶光(GMT)的差值,单位是 hours:minutes(PHP 5.1.3 中新增的)
T - 时区的简写(实例:EST、MDT)
Z - 以秒为单位的时区偏移量。UTC 以西时区的偏移量为负数(-43200 到 50400)
c - ISO-8601 标准的日期(例如 2013-05-05T16:34:42+00:00)
r - RFC 2822 格式的日期(例如 Fri, 12 Apr 2013 12:01:05 +0200)
U - 自 Unix 纪元(January 1 1970 00:00:00 GMT)以来经由的秒数
七、显示本地化的日期和韶光
不同的国家和地区,有利用不同的韶光,日期,货币和字符集。如西方国家利用Tuesday,我们国家表示星期四。
1、setlocale()函数:改变php默认确当地化环境
语法格式:string setlocale(string category,[string locale]);
参数category的选项如下:
LC_ALL - 包括下面的所有的设置本地化规则
LC_COLLATE - 排顺序序,字符串比较
LC_CTYPE - 字符串分类和转换(例如所有字符大写或小写)
LC_MESSAGES - 系统格式
LC_MONETARY - 本地化环境的货币格式
LC_NUMERIC - 本地化环境的数字格式
LC_TIME - 本地化环境的日期和韶光格式
参数locale如果为空,就会利用系统环境变量的locale或者lang的值,否则就会运用locale参数所指定确当地化环境。如:en_US为美国本地化环境,chs则是简体中文,cht为繁体中文。
2、strftime()函数:根据本地化环境设置来格式化输出日期和韶光
语法格式:string strftime(string format,int timestamp);
该函数返回指定的格式化字符串对参数timestamp进行格式化输出字符串。如果没有给出timestamp则用本地韶光。月份,星期和其他措辞干系的字符串写法和setlocale函数设置确当前区域有关。
参数format的转换标记如下:
%a - 星期几名称的简写
%A - 星期几名称的全称
%b - 月份名称的简写
%B - 月份名称的全称
%c - 首选的日期和韶光表示法
%C - 表示世纪的数字(年份除以 100,范围从 00 到 99)
%d - 一个月中的第几天(01 到 31)
%D - 韶光格式,与 %m/%d/%y 表示法相同
%e - 一个月中的第几天(1 到 31)
%g - 与 %G 表示法类似,但不带世纪
%G - 与 ISO 星期数对应的 4 位数年份(见 %V)
%h - 与 %b 表示法相同
%H - 小时,利用 24 小时制(00 到 23)
%I - 小时,利用 12 小时制(01 到 12)
%j - 一年中的第几天(001 到 366)
%m - 月份(01 到 12)
%M - 分
%n - 换行符
%p - 与给定的韶光值相对应的 am 或 pm
%r - a.m. 和 p.m. 的韶光标记法
%R - 24 小时制的韶光标记法
%S - 秒
%t - tab 制表符
%T - 当前韶光,与 %H:%M:%S 表示法相同
%u - 星期几的数字表示(1 到 7),Monday[星期一] = 1。警告:在 Sun Solaris 系统中,Sunday[星期日] = 1
%U - 当年包含的周数,从第一个星期日开始,作为第一周的第一天
%V - 当年包含的 ISO 8601 格式下的周数(01 到 53),week 1 表示当年的第一周,至少要有四天,且以星期一作为周的第一天
%W - 当年包含的周数,从第一个星期一开始,作为第一周的第一天
%w - 以十进制数形式表示一周中的某天,Sunday[星期日] = 0
%x - 首选的日期表示法,不带韶光
%X - 首选的韶光表示法,不带日期
%y - 不包含表示世纪的数字的年份表示(范围从 00 到 99)
%Y - 包含表示世纪的数字的年份表示
%Z 或 %z - 时区名称或简写
%% - 输出一个 % 字符
<?phpsetlocale(LC_ALL,"en_US");echo "美国格式:".strftime("%A");echo "<br/>";setlocale(LC_ALL,"chs");echo "中文简体格式:".strftime("%A");echo "<br/>";setlocale(LC_ALL,"cht");echo "繁体中文格式:".strftime("%A");?>输出结果:美国格式:Wednesday中文简体格式:星期三繁体中文格式:琍戳
把稳:本页面的编码格式是gb2312,以是繁体中文的日期是乱码,将编码格式改为big5,繁体中文将显示处理,但其他笔墨变成乱码了,可以自行修正查看。
八、将日期和韶光解析为unix韶光戳语法格式:int strtotime(string time,[int now]);
可以将英文文本的日期和韶光解析为unix韶光戳,其值是相对付参数now给出的韶光。如果没有供应参数,则利用系统当前韶光。
如果参数time的格式是绝对韶光,则now参数不起浸染。如果是相对韶光,则对应的韶光便是参数now来供应的。如果解析失落败返回false,在5.1之前的版本失落败返回-1。
<?php$now = strtotime("now");echo "now:".$now;echo "<br/>";echo "格式化再输出:".date("Y-m-d H:i:s",$now);echo "<br/>";$now = strtotime("5 May 2021");echo "5 May 2021:".$now;echo "<br/>";echo "格式化再输出:".date("Y-m-d H:i:s",$now);echo "<br/>";$now = strtotime("+3 day");echo "+3 day:".$now;echo "<br/>";echo "格式化再输出:".date("Y-m-d H:i:s",$now);echo "<br/>";$now = strtotime("+1 week");echo "+1 week:".$now;echo "<br/>";echo "格式化再输出:".date("Y-m-d H:i:s",$now);echo "<br/>";$now = strtotime("next Thursday");echo "next Thursday:".$now;echo "<br/>";echo "格式化再输出:".date("Y-m-d H:i:s",$now);echo "<br/>";$now = strtotime("last Monday");echo "last Monday:".$now;echo "<br/>";echo "格式化再输出:".date("Y-m-d H:i:s",$now);echo "<br/>";?>输出结果:now:1612324354格式化再输出:2021-02-03 11:52:345 May 2021:1620144000格式化再输出:2021-05-05 00:00:00+3 day:1612583554格式化再输出:2021-02-06 11:52:34+1 week:1612929154格式化再输出:2021-02-10 11:52:34next Thursday:1612368000格式化再输出:2021-02-04 00:00:00last Monday:1612108800格式化再输出:2021-02-01 00:00:00
1、比较两个韶光的大小
由于strtotime()函数返回的是韶光戳格式,以是可以利用两个韶光的韶光戳就可以比较韶光的大小。
<?php$date1 = date("Y-m-d H:i:s");echo "韶光1:".$date1;echo "<br/>";$date2= "2021-1-1 12:00:00";echo "韶光2:".$date2;echo "<br/>";$ts = strtotime($date1) - strtotime($date2);if($ts>0){echo "韶光1早于韶光2";}else{echo "韶光2早于韶光1";}?>输出结果:韶光1:2021-02-03 12:38:24韶光2:2021-1-1 12:00:00韶光1早于韶光2
2、实现倒计时功能
<?php$date1 = date("Y-m-d");echo $date1;echo "<br/>";$date2 = "2021-2-11";echo $date2;echo "<br/>";$s1 = strtotime($date1);$s2 = strtotime($date2);$ss1 = ceil(($s2-$s1)/3600);$ss2 = ceil(($s2-$s1)/86400);echo "离除夕还有“".$ss1."”个小时";echo "<br/>";echo "离除夕还有“".$ss2."”天";?>输出结果:2021-02-032021-2-11离除夕还有“192”个小时 离除夕还有”8“天
解释:ceil()函数的格式为:float ceil(float value); 该函数为取整函数,返回不小于参数value值的最小整数。如果有小数部分,则进一位。该当把稳的是函数的返回类型是float型,而不是int型。
九、打算页面脚本的运行韶光
语法格式:string microtime(void);
该函数返回当前unix韶光戳和微秒数。返回格式为msec sec的字符串。个中sec是当前unix韶光戳,msec是微秒数。
<?phpfunction run_time(){$date = microtime();echo "函数:".$date;echo "<br/>";list($msec,$sec) = explode(" ",$date);$rs = (float)$msec+(float)$sec;return $rs;}$st = run_time();for($i=0;$i<100;$i++){echo $i." ";}sleep(5); //延迟5秒$et = run_time();$rs = $et - $st;echo "该实例运行了“".$rs."”秒";?>输出结果:函数:0.80279900 16123312720 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
explode()函数:根据指定字符分割字符串为数组
list() 函数:将数组中的值赋值给一些变量
sleep()函数:延迟几秒代码实行/就寝几秒
十、其异日期和韶光函数这里只是大概先容,参数解释可以详细看手册资料。
date_add() 添加日、月、年、时、分和秒到一个日期。
date_create_from_format() 返回一个根据指定格式进行格式化的新的 DateTime 工具。
date_create() 返回一个新的 DateTime 工具。
date_date_set() 设置一个新的日期。
date_default_timezone_get() 返回默认时区,被所有的 Date/Time 函数利用。
date_default_timezone_set() 设置默认时区,被所有的 Date/Time 函数利用。
date_diff() 返回两个日期间的差值。
date_format() 返回根据指定格式进行格式化的日期。
date_get_last_errors() 返回日期字符串中的警告/缺点。
date_interval_create_from_date_string() 从字符串的干系部分建立一个 DateInterval。
date_interval_format() 格式化韶光间隔。
date_isodate_set() 设置 ISO 日期。
date_modify() 修正韶光戳。
date_offset_get() 返回时区偏移。
date_parse_from_format() 根据指定的格式返回一个带有指定日期的详细信息的关联数组。
date_parse() 返回一个带有指定日期的详细信息的关联数组。
date_sub() 从指定日期减去日、月、年、时、分和秒。
date_sun_info() 返回一个包含有关指定日期与地点的日出/日落和薄暮开始/薄暮结束的信息的数组。
date_sunrise() 返回指定日期与地点的日出韶光。
date_sunset() 返回指定日期与地点的日落韶光。
date_time_set() 设置韶光。
date_timestamp_get() 返回 Unix 韶光戳。
date_timestamp_set() 设置基于 Unix 韶光戳的日期和韶光。
date_timezone_get() 返回给定 DateTime 工具的时区。
date_timezone_set() 设置 DateTime 工具的时区。
gettimeofday() 返回当前韶光。
gmdate() 格式化 GMT/UTC 日期和韶光。
gmmktime() 返回 GMT 日期的 UNIX 韶光戳。
gmstrftime() 根据区域设置格式化 GMT/UTC 日期和韶光。
idate() 格式化本地韶光/日期为整数。
localtime() 返回本地韶光。
strptime() 解析由 strftime() 天生的韶光/日期。
timezone_abbreviations_list() 返回包含夏令时、偏移量和时区名称的关联数组。
timezone_identifiers_list() 返回带有所有时区标识符的数值数组。
timezone_location_get() 返回指定时区的位置信息。
timezone_name_from_ abbr() 根据时区缩略语返回时区名称。
timezone_name_get() 返回时区的名称。
timezone_offset_get() 返回相对付 GMT 的时区偏移。
timezone_open() 创建一个新的 DateTimeZone 工具。
timezone_transitions_get() 返回时区的所有转换。
timezone_version_get() 返回时区数据库的版本。
来日诰日我们来看看PHP和Web页面中的利用