time()方法不会受到时区设置的影响返回的一直是格林威治时间,也就是这个数值始终是一直的
但是date函数和strtotime函数在进行格式化转换时,会将时区的偏移量计算进去也就是雖然time()返回的是正确的时间戳,但是date后得到的并不是想要的时间,同理strtotime得到的时间戳也会是加上偏移量的时间戳
所以PHP环境中一定要设置时區:
- 利用框架自带的属性设置时区
发布了67 篇原创文章 · 获赞 21 · 访问量 4万+
time()方法不会受到时区设置的影响返回的一直是格林威治时间,也就是这个数值始终是一直的
但是date函数和strtotime函数在进行格式化转换时,会将时区的偏移量计算进去也就是雖然time()返回的是正确的时间戳,但是date后得到的并不是想要的时间,同理strtotime得到的时间戳也会是加上偏移量的时间戳
所以PHP环境中一定要设置时區:
发布了67 篇原创文章 · 获赞 21 · 访问量 4万+
|
||||||
|
|
|
|
|
|
|
|
在应用开发过程中经常会对数据庫中的某些表添加created_at或updated_at字段来记录某条记录被创建和最后更新的时间戳大家在开发时一般是用数据库内建的时间戳类型来存储呢(TIMESTAMP
,DATETIME
之类)还是字段使用int型然后存入一个php时间戳(形如的整形)?
我先来说一下个人看法:我比较倾向于使用数据库内建的时间戳理由:
- 这个昰体验上比较直观的。对于线上项目在程序出现问题的时候往往要进入数据库直接查历史数据,这时如果我们存储的是PHP时间戳的话就很鈈方便你会看到一列形如乱码的字段(pia)在那儿。当你想筛选数据时就不得不使用相关SQL函数进行时间转换。而且由于时间戳是时区无關的有时还要手动处理时差,才能的到准确的范围不然你直接在数据库修正数据的时候很容易有那么几个小时的用户数据躺枪,同时還有那么几小时的数据漏掉对于用户来自于多个时区的项目这影响可能是灾难性的。
- 在页面上获取用户输入的时候我相信没有哪个程序会让用户直接输入时间戳吧?绝大部分情况下程序收到的一手用户输入本质上还是一个字符串我们在后端需要转换成时间戳再写入数據库,而且转换前的格式验证还是不能省的
但有一次公司一个持相反观点的工程师在讨论时是这样说的:
- 有这样一条原则,不依赖数据庫处理主要数据逻辑由于数据库时间戳取出的时候在PHP变量内表示为字符串,会在需要计算时带来不便在对这些字段筛选时,PHP不得不依賴于数据库查询函数来进行数据转换
- 还是时区的问题,如果数据库时区配置和PHP配置不同或者用户来自多时区,还需要根据客户端时区來处理时差使用时间戳可以避免这些麻烦,直接对秒数进行数学计算
想问问,大家是怎么看的你们现在的项目中都是怎么实现的?