时间日期函数

date_default_timezone_get():得到系统默认时区

date_default_timezone_set($str):设置系统默认时区,中国设置:"PRC"、"Asia/Shanghai"、"Asia/Chongqing"

time():得到当前时间戳,返回自1970年1月1日00:00:00到当前的秒数

microtime() / microtime(true):得到当前微秒数(微秒数+时间戳),加了true参数则结果将以浮点数返回

date($format ,$time):格式化时间戳,输出为字符串

  $time:可选参数,如果没有指定时间戳,则默认使用本地当前时间戳time()

  $format参数可用格式字符串:

    d  月份中的第几天,有前导0的两位数字    01~31 

    D  星期中的第几天,3个字母                Mon~Sun

    j   月份中的第几天,没有前导0             1~31

    l(L的小写)  星期几,完整的文本          Sunday~Saturday

    N  ISO-8601数字表示星期中的第几天         1(星期一)~7(星期天)

    S  每月天数后面的英文后缀,2个字符        st、nd、rd或th,可和j一起使用

    w  星期中的第几天,数字表示           0(星期天)~6(星期六)

    z  年份中的第几天              0~365

    W   ISO-8601年份中的第几周,每周从星期一开始   如:42(当年的第42周)

    F  月份,完整的文本格式             January~December

    m  数字表示的月份,有前导0            01~12

    M  3个字母缩写表示的月份          Jan~Dec

    n  数字表示的月份,没有前导0         1~12

    t   给定月份应有的天数            28~31

    L  是否为闰年                如果是闰年为1,否则为0

    o  ISO-8601年份数字,和Y值相同       1999

    Y  4位数字完整表示的年份           1999

    y  2位数字表示的年份              99

    a  小写的上午和下午值            am或pm

    A  大写的上午和下午值            AM或PM

    B  Swatch Internet标准时           000到999

    g  小时,12小时格式,无前导0         1~12

    G  小时,24小时格式,无前导0        0~23

    h  小时,12小时格式,有前导0         01~12

    H  小时,24小时格式,有前导0         00~23

    i    分钟,有前导0               00~59

    s   秒数,有前导0               00~59

    e  时区标识                 如UTC、GMT

    I(i大写)  是否为夏令时              如果是夏令时为1,否则为0

    O  与格林威治时间相差的小时数        如+0200

    P  与格林威治时间(GMT)的差别,小时和分钟间有冒号  如+02:00

    T  本机所在的时区              如EST、MDT

    Z  时差偏移量的秒数,UTC西边的时区偏移量总是负的,UTC东边的时区偏移量总是正的  -43200~43200

    c  ISO-8601格式的日期            2004-02-12T15:19:21+00:00

    r  RFC822格式的日期              Thu,21 Dec 2000 16:01:07 +0200

    U  从Unix纪元(January 1 1970 00:00:00 GMT)开始至今的秒数  time()

  例:

    echo "当前时间戳:",time(),"<br>";

    echo "当前日期时间:",date("Y-m-d H:i:s",time()),"<br>";

mktime($hour_H ,$minute_i ,$second_s ,$month_n ,$day_j ,$year_Y):将时间日期转为Unix时间戳输出,时间戳是一个长整数包含了从Unix纪元到当前的秒数,该函数的参数可以从右向左省略,省略的参数会被自动设置成本地的时间日期的当前值

strtotime($strtime ,$time):将时间日期字符串解析为Unix时间戳输出,失败则返回false

  $time:可选参数,如果没有指定时间戳,则默认使用本地当前时间戳time()

  例1:

    echo "当前日期时间戳:",strtotime ( "now" ),"<br>";

    echo "2018年1月1号12:00:00的时间戳:",strtotime ( "2018-01-01 12:00:00" ),"<br>";

    echo "2000年9月10号的时间戳:",strtotime ( "10 September 2000" ),"<br>";

    echo "明天的这时刻:",date("Y-m-d H:i:s",strtotime( "+1 day" )),"<br>";

    echo "昨天的这时刻:",date("Y-m-d H:i:s",strtotime( "-1 day" )),"<br>";

    echo "下周的这时刻:",date("Y-m-d H:i:s",strtotime( "+1 week" )),"<br>";

    echo "上周的这时刻:",date("Y-m-d H:i:s",strtotime( "-1 week" )),"<br>";

    echo "一周零两天四小时两秒后:",date("Y-m-d H:i:s",strtotime( "+1 week 2 days 4 hours 2 seconds" )),"<br>";

    echo "向上最近的一个周一:",date("Y-m-d",strtotime( "last Monday" )),"<br>";

    echo "向下最近的一个周四:",date("Y-m-d",strtotime( "next Thursday" )),"<br>";

    echo "一个月后:",date("Y-m-d",strtotime( "+1 month" )),"<br>";

    echo "一个月前:",date("Y-m-d",strtotime( "last month" )),"<br>";

    echo "十年后:",date("Y-m-d",strtotime( "+10 year" )),"<br>";

  例2:

    $date="2018-01-31 12:30:59";

    echo "指定日期的一个月前的相同时刻:",date("Y-m-d H:i:s",strtotime("-1 month",strtotime($date)));

    

注意:32位系统中,有效的时间戳范围是格林威治时间1970年01月01日到2038年01月19日03:14:07,复合32位中一个整型变量所能保存的最大值,超过这个时间后整型数值将会溢出,可以使用DateTime类来解决这个问题:

例:

  $date="2040-01-01 12:00:00";

  $dt=new DateTime($date);

  echo $dt->format('U');  // 2209032000  转成Unix时间戳

  echo $dt->format('Y-m-d H:i:s');  // 2040-01-01 12:00:00  格式化输出时间日期

  //将Unix时间戳转为datetime

  $dt=new DateTime('@2209032000');  

  echo $dt->format('Y-m-d H:i:s');  // 2040-01-01 12:00:00

  //使用DateTime类的setTimezone方法设置时区

  $dt=new DateTime('@1420029030');  

  $tz=timezone_open('Asia/HONG_KONG');  

  $dt->setTimezone($tz);  

  echo $dt->format('Y-m-d H:i:s'); // 2014-12-31 20:30:30

posted @ 2018-05-12 21:36  Autumn_n  阅读(514)  评论(0编辑  收藏  举报
TOP