关于时间戳的问题

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

// 最简单的方法
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’);,结果还是不对,发出来讨论一下

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
  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年前 评论

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