zoukankan      html  css  js  c++  java
  • 有关mktime和gmmktime

    int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )

    根据给出的参数返回 Unix 时间戳。时间戳是一个长整数,包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数。

    参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值


    int gmmktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )

    mktime() 完全一样,只除了返回值是格林威治标准时的时间戳。

    参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。

    mktime() 一样,参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。

    PHP手册的介绍很模糊,下面来看两个例子:

    首先将php.ini中的date.timezone 设置为 date.timezone = PRC

    <?php
    $ltime = mktime();
    $gtime = gmmktime();
    echo "$ltime<br/>$gtime<br/>";
    ?>

    输出结果如下:

    1315311558
    1315311558

    两个函数的返回结果是一样的, 按我的理解一个返回本地时间的时间戳,一个返回GMT时间的时间戳,应该相差八小时才对。

    再看一个例子:

    <?php
    $ltime = mktime(0,0,0,1,1,1990);
    $gtime = gmmktime(0,0,0,1,1,1990);
    echo "$ltime<br/>$gtime<br/>";
    ?>
    输出结果如下:
    631123200
    631152000
    (631152000-631123200)/3600=8,刚好相差8个小时,这就对了。

    对以上两个例子的分析:

    (1)在第一个例子中尽管gmmktime返回的是当前GMT时间的时间戳,但是默认参数传进去也是当前GMT时间的时、分、秒 、月、日、年,而mktime默认参数穿进去的是当前本地时间的

    时、分、秒 、月、日、年,这样的话在mktime中将时间转换为GMT时间后会与gmmktime的参数值一样,所以他们的返回值一样

    (2)在第二个例子中,mktime和gmmktime两个传进去的参数值都是固定死的1990-01-01 00:00:00,所以在mktime中会将1990-01-01 00:00:00转换为GMT时间再计算时间戳,而北京时间比GMT时间大8个时区,所以mktime的计算方法是将1990-01-01 00:00:00减去8个小时,这就是为什么gmmktime的返回值比mktime的返回值大8个小时的原因了。


  • 相关阅读:
    华为交换机S5700设置远程ssh telnet登录
    华为交换机S5700 vty 0 4
    OpenStack--Cinder(G版)中的volume type
    nova volume-create的使用
    druid监控配置
    2PC之JTA原理与实现
    线上服务内存OOM问题定位
    分布式系统事务一致性解决方案
    Spring MVC异常统一处理的三种方式
    Git回滚到历史节点(SourceTree篇)
  • 原文地址:https://www.cnblogs.com/mxw09/p/2169148.html
Copyright © 2011-2022 走看看