因为我花了大部分时间在php和mysql或pgsql上,所以我会使用DateTime作为日期API的通用字。在php中没有“日期”,“时间”,“日期时间”和“日期时间偏移”我们什么时候选择DateTime作为时间戳
随着我开发Web应用程序越来越精细,我大多数时间使用DateTime,但有时我不知道它是否真的我想要的是。 例如,我只是想显示今天的日期(例如,当我想存储一个论坛或博客文章),没有计算,没有过滤器提供,没有迭代发生......那么为什么我使用\DateTime
超过date()
函数?
我看到this topic提供了一些简单的描述每种技术的优点。
但它并没有真正回答这个问题。在PHP中的DateTime对象和我的数据库中的其他2个字节中抛出2个字节是否真的是一个损失,因为它允许我使用DATE_INTERVAL
API(在php中它是DateInterval
)和IntlDateFormatter。
此外,这篇文章说,UNIX_TIMESTAMP从1970年保留但它是不符合逻辑和一些测试证明:
echo date('d/m/Y',time(-1));
回声'31/12/1969' 作品!这是合乎逻辑的。一个32位无符号整数从0到4 294 967 295
,而且在68年内只有将近20亿的秒数,所以int被签名并且“负时间戳”必须存在!
另一个想法对我来说非常重要,这使得我每次选择DateTime都是想处理日期,而不是整数。 DateTime是日期,时间戳不是!我发现时间戳的唯一意义是我要计时一个文件名的时间,因为在那个时间戳是时间戳...
但是,它仍然是一个问题:时区处理。 作为MySQL和其他存储日期为DATETIME时,现在不处理时区,我用的时区集成为一体的“过滤器中逃逸出来”避让部件
$toStoreDate = new \DateTime($_POST['date'],new DateTimeZone('UTC'));
$dao->exec('INSERT INTO mytable(mydate) VALUES (\''.$toStoreDate->format('Y-m-d h:i:s').'\')');
$toDisplayDate =new \DateTime($dao->query('SELECT mydate FROM mytable')
->fetch(DAO::FETCH_ASSOC)['mydate']);
$toDisplayDate->setTimeZone(new DateTimeZone('myLocal'));
是正确的方式?存储一个简单的时间戳然后获得当地的好时间不是更好吗?
所以,这里是问题的一个总结:
- 是在2个字节的日期时间在非常简单的使用API(仅显示)
- 的损失,它的时间放弃unix_timestamp?
- 存储一个简单的时间戳,然后获得良好的本地时间不是更好吗?
可能无关紧要,但'date()'只能工作到2038年。在那一年,'date()'可能会被弃用;-) –
即使在2038年64位系统将是标准?如果不是,将unix时间戳规范从int移植到long int会出现什么问题? – artragis
确实。 JavaScript甚至使用1970年1月1日的毫秒来测量时间。我的猜测是,unix时间戳在这里保持^^ – Johan