关于时间戳的问题

问题是获取今天的开始时间

// 最简单的方法
date('Y-m-d 00:00:00'); // 字符串
strtotime(date('Y-m-d 00:00:00')); // 时间戳

忽然想换一种写法,比如下面这个例子求今天的开始时间

date_default_timezone_set('PRC');
// 程序运行时间是 2020-08-22 19:14
$time = time();
echo ($time % 86400); // 40427
echo $time - ($time % 86400); // 1598054400
echo date('Y-m-d H:i:s', $time - ($time % 86400)); // 2020-08-22 08:00:00

按照我的想法 time() % 86400 结果应该大概是 68400+,因为当前时间是 2020-08-22 19:14,但程序运行的结果是 40427
最终 date(‘Y-m-d H i s’, $time - ($time % 86400)); 的结果是 2020-08-22 08 00 00
我知道这里是时区的原因,但是我已经设置了时区为 date_default_timezone_set(‘PRC’);,结果还是不对,发出来讨论一下

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
  1. 时间戳的时区是 UTC。
  2. 你将默认的时区设置为 PRC,也就是 +8 时区。
  3. date 函数计算结果是 00:00,再进行时区转换得到了 08:00。
  4. 如果想得到 00:00,把时区设置为 UTC 就可以了。
3年前 评论
讨论数量: 3
leo

时间戳 Unix timestamp 是没有时区的

3年前 评论
cangsongbayu (楼主) 3年前

明白了,时间戳是 8 点钟开始的

3年前 评论
  1. 时间戳的时区是 UTC。
  2. 你将默认的时区设置为 PRC,也就是 +8 时区。
  3. date 函数计算结果是 00:00,再进行时区转换得到了 08:00。
  4. 如果想得到 00:00,把时区设置为 UTC 就可以了。
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!