黑马程序员技术交流社区

标题: 【上海校区】PHP日期时间处理 [打印本页]

作者: 不二晨    时间: 2018-11-16 09:38
标题: 【上海校区】PHP日期时间处理
概述
PHP中对日期进行处理常用的几个函数如下:
这些函数是PHP核心的部分,无需安装即可使用。另外需要注意的是,这些函数的行为还受到 php.ini 中配置的时区等的影响。
名称描述默认PHP 版本
date.timezone默认时区(所有的 Date/Time 函数使用该选项)""PHP 5.1
date.default_latitude默认纬度(date_sunrise() 和 date_sunset() 使用该选项)"31.7667"PHP 5.0
date.default_longitude默认经度(date_sunrise() 和 date_sunset() 使用该选项)"35.2333"PHP 5.0
date.sunrise_zenith默认日出天顶(date_sunrise() 和 date_sunset() 使用该选项)"90.83"PHP 5.0
date.sunset_zenith默认日落天顶(date_sunrise() 和 date_sunset() 使用该选项)"90.83"PHP 5.0date() 函数详细介绍
data() 函数的语法如下:
string date ( string $format [, int $timestamp ] )
关于format格式的详细说明如下表:
格式字串可以识别以下 format 参数的字符串format说明返回值例子
------
d月份中的第几天,有前导零的 2 位数字0131
D星期中的第几天,文本表示,3 个字母MonSun
j月份中的第几天,没有前导零131
l(“L”的小写字母)星期几,完整的文本格式SundaySaturday
NISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加)1(表示星期一)到 7(表示星期天)
S每月天数后面的英文后缀,2 个字符stndrd
或者 th。可以和 j 一起用
w星期中的第几天,数字表示0(表示星期天)到 6(表示星期六)
z年份中的第几天0365
星期------
WISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的)例如:42(当年的第 42 周)
------
F月份,完整的文本格式,例如 January 或者 MarchJanuaryDecember
m数字表示的月份,有前导零0112
M三个字母缩写表示的月份JanDec
n数字表示的月份,没有前导零112
t指定的月份有几天2831
------
L是否为闰年如果是闰年为 1,否则为 0
oISO-8601 格式年份数字。这和
Y 的值相同,只除了如果 ISO
的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加)Examples: 1999 or 2003
Y4 位数字完整表示的年份例如:19992003
y2 位数字表示的年份例如:9903
时间------
a小写的上午和下午值ampm
A大写的上午和下午值AMPM
BSwatch Internet 标准时000999
g小时,12 小时格式,没有前导零112
G小时,24 小时格式,没有前导零023
h小时,12 小时格式,有前导零0112
H小时,24 小时格式,有前导零0023
i有前导零的分钟数0059>
s秒数,有前导零0059>
u毫秒 (PHP 5.2.2 新加)。需要注意的是
date() 函数总是返回
000000 因为它只接受 integer
参数, 而 DateTime::format() 才支持毫秒。示例: 654321
时区------
e时区标识(PHP 5.1.0 新加)例如:UTCGMTAtlantic/Azores
I是否为夏令时如果是夏令时为 1,否则为 0
O与格林威治时间相差的小时数例如:+0200
P与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加)例如:+02:00
T本机所在的时区例如:ESTMDT(【译者注】在 Windows
下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。
Z时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。-4320043200
完整的日期/时间------
cISO 8601 格式的日期(PHP 5 新加)2004-02-12T15:19:21+00:00
rRFC 822 格式的日期例如:Thu, 21 Dec 2000 16:01:07 +0200
U从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数参见 time()<?php// 假定今天是:March 10th, 2001, 5:16:18 pm$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (MySQL DATETIME 格式)$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm$today = date("m.d.y");                         // 03.10.01$today = date("j, n, Y");                       // 10, 3, 2001$today = date("Ymd");                           // 20010310$today = date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.$today = date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month$today = date("H:i:s");                         // 17:16:17date('Y'); // 当前年份date('m'); // 当前月份date('d'); // 当前是几号strtotime() 函数详细介绍
strtotime() 函数语法如下:
int strtotime ( string $time [, int $now = time() ] )<?phpecho strtotime("now"), "\n";  // 现在时间戳echo strtotime("10 September 2000"), "\n"; // 2000年10月现在时间戳echo strtotime("+1 day"), "\n";  // 距离现在一天后的时间戳echo strtotime("-3 day"), "\n";  // 距离现在三天前的时间戳echo strtotime("+1 week"), "\n"; // 距离现在一周后的时间戳echo strtotime("-1 month"), "\n";// 距离现在一个月前的时间戳echo strtotime("+1 year"), "\n"; // 距离现在一年后的时间戳echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";  // 距离现在1周2天4小时2秒后的时间戳echo strtotime("next Thursday"), "\n";  // 下个星期三echo strtotime("last Monday"), "\n";    // 本月的最后一个星期一mktime() 函数详细介绍
mktime() 函数语法如下:
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )<?php$lastday = mktime(0, 0, 0, 3, 0, 2000);echo strftime("Last day in Feb 2000 is: %d", $lastday);$lastday = mktime(0, 0, 0, 4, -31, 2000);echo strftime("Last day in Feb 2000 is: %d", $lastday);?> 其他一些常用函数
time() 获取当前Unix秒数时间戳,还可以使用 microtime() 获取当前 Unix 时间戳和微秒数,这个函数经常用来计算脚本运行的耗时
mixed microtime ([ bool $get_as_float ] )<?php/** * 兼容php5.0版本以下 */function microtime_float(){    list($usec, $sec) = explode(" ", microtime());    return ((float)$usec + (float)$sec);}$time_start = microtime_float();usleep(100);  // 睡一小会儿$time_end = microtime_float();$time = $time_end - $time_start;echo "耗时: $time 秒\n";?> 时间戳和时间字符串基本函数使用说明
使用 time() 函数,会获取当前时间的 Unix 时间戳,是一个10位的整数,表示自 Unix 纪元(1月1日 1970 00:00:00 GMT)起的当前时间的秒数。
使用 strtotime() 函数,可以将任何英文文本的日期或时间描述解析为 Unix 时间戳。失败则返回 FALSE。应该尽可能使用 YYYY-MM-DD 格式或者使用 date_create_from_format() 函数
使用 date() 函数,可以将时间戳按照指定的格式格式化为时间字符串
基本示例$time = time(); // 当前时间戳var_dump($time);  // int(1516155874)$time_str = date('Y-m-d H:i:s', $time); // 将时间戳转化为相应的时间字符串var_dump($time_str);  // string(19) "2018-01-17 02:24:34"$time_int = strtotime($time_str);  // 将时间字符串转化为时间戳var_dump($time_int); // int(1516155874)常用时间获取
获取那种基于某个时间一定时间段的时间的做法,可以使用 strtotime(),也可以 time() 获取当前时间然后加上或减去指定时间距离现在的偏移秒数。
数据库查询注意事项
在数据库中保存为 timastamp 或者 datetime 类型的数据,在PHP中查询时,需要使用时间字符串进行查询,而且查询结果也是时间字符串。
另外如果是使用 int 类型保存的时间戳,则要使用时间戳进行查询。查询结果是时间戳。


作者: 不二晨    时间: 2018-11-21 17:14

作者: 魔都黑马少年梦    时间: 2018-11-22 16:55

作者: 小影姐姐    时间: 2018-11-22 17:18





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2