php time() 的问题

time()取得是服务器的时间,那么在中国,和美国取得时间是一样的吗?因为开发出了个问题,商品团购活动在中国已经结束,但是国外还能购买,所有时间用的都是时间戳,数据库的开始时间是一致的,难道是time()的问题?

回复
阅读 3.7k
6 个回答

上下楼答案都对, 时间戳与时区无关. 但是时间戳转化成日期时间格式时, 与时区有关. 之前答案错误... 为误导题主道歉.

$time = time();
date_default_timezone_set('America/Los_Angeles'); 
echo time() . PHP_EOL;
echo date('Y-m-d H:i:s', $time) . PHP_EOL;

date_default_timezone_set("UTC"); 
echo time() . PHP_EOL;
echo date('Y-m-d H:i:s', $time) . PHP_EOL;

时间戳是 从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
所以,该值与时区无关,与时区有关的是时间,比如 1471827600是北京时间(2016-08-22T09:00,东8区),那么同样的时间戳在东七区的时间䪱炯2016-08-22T08:00。

time()获得的是时间戳,而时间戳是无时区的,都是统一采用格林尼治时间。所以除非你两台服务器本身的服务器时间就不一致,不然获得的time()是一致的。

统一时区,为UTC,我也遇到过

函数time()获取的是时间戳,是没有时区概念的.
但是如果你用国内外2台服务器,设置同一个时间戳开始售卖,同一时间戳结束售卖,那么国内开始的时候,国外的网站是没有开始的,(推测的依据是题主说国内结束国外还没有结束,而售卖持续的时间一样)因为时间戳转换为时间就有了时区的概念,所以如果要同时售卖,同时结束,你需要将两地的时间换算成格林威治标准时间(时间戳的由来),然后得到不同的时间戳,加上你想要持续的售卖时间就可以了.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏