[英]What MySQL datatype to store a PHP DateInterval
我想在MySQL数据库中存储一个PHP DateInterval 。
为此,最好的数据库数据类型是什么,以便我可以序列化DateInterval? (即我要存储它,然后稍后从数据库值创建DateInterval)。
我建议存储DateInterval
构造函数采用的间隔规范,例如“ P35D”,“ P1DT24M39S”等。
我选择这个的原因:
这很简单。 如果您让用户选择特定的时间间隔,那么我假设您有一个表单,其中包含针对不同时间单位的不同输入。 从这样的输入中创建这些字符串之一,而不是在时间单位之间进行转换以存储一个int,将是非常简单的。
它相对紧凑。 不一样紧凑,如果你没有将其转换为一个时间单位,并存储为一个int,但比对序列化对象DateInterval和存储整个事情更加紧凑。
我可能忽略了一个因素,该因素会使其他事情成为更好的选择,但是我主要只是想分享我先前评论的理由。
如果您最初并不是像我想象的那样直接从用户那里获取间隔,而是从DateTime::diff
(或者我没有想到的其他东西)获取间隔,您仍然可以从对象获取间隔规范。 它具有公共属性,可以存储您需要的所有作品。 这样的事情应该起作用:
function getIntervalSpec(DateInterval $interval) {
$spec = 'P';
foreach(['y', 'm', 'd', 'h', 'i', 's'] as $u) {
if ($u == 'h') $spec .= 'T';
$spec .= $interval->$u;
$spec .= $u == 'i' ? 'M' : strtoupper($u);
}
return $spec;
}
您可以使用DateInterval
的构造函数格式进行序列化: $interval->format("P%yY%mM%dDT%hH%iM%sS");
但是,有陷阱。 您无法通过构造函数恢复invert
(符号)或天days
。 这两个属性直接由DateTime->diff(DateTime)
初始化。 如果您不需要此信息- format
会很好。 但是,如果需要它, serialize($interval)
是最佳选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.