程序中时区的问题

    time()函数返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。但是你会发现返回的秒数少了8个小时,这是因为系统的默认时区是东八区,格林威治时间 1970 年 1 月 1 日 00:00:00对应的是北京时间 1970 年 1 月 1 日 08:00:00,这样就造成time()函数返回的秒数会少了8个小时。如果只是单纯的秒数和字符串时间之间转换,这点可以忽略,因为你在用系统函数转换的时候,系统函数会按当前系统的默认时区去处理。


    现在需要判断当前时间的小时级别是否是在另外两个时间的小时级别之间

    开始时间:2018 年 6 月 7 日 07:00:00

    结束时间:2018 年 6 月 9 日 09:00:00

    当前时间:2018 年 6 月 8 日 08:00:00

    需要判断8点整是否在7点整和9点整之间,但是只有上面三个时间的秒数值,需要时间秒数对(24*60*60)求余,得到余数是小时时间的秒数,但是得到的开始时间的余数为(23*60*60),结束时间的余数为(1*60*60),当前时间的余数为(0*60*60),这样的到的结论就是8点整不在7点整和9点整之间,这肯定是不科学的,这就是系统时区造成的结果。将时间值加上(8*60*60)再对(24*60*60)求余,得到的开始时间的余数为(7*60*60),结束时间的余数为(9*60*60),当前时间的余数为(8*60*60),这样就正确了,这是把缺少的8个小时补足了。PHP中date('Z')表示系统时区时差偏移量的秒数值。

你可能感兴趣的:(php)