繁体   English   中英

什么MySQL数据类型存储PHP DateInterval

[英]What MySQL datatype to store a PHP DateInterval

我想在MySQL数据库中存储一个PHP DateInterval

为此,最好的数据库数据类型是什么,以便我可以序列化DateInterval? (即我要存储它,然后稍后从数据库值创建DateInterval)。

我建议存储DateInterval构造函数采用的间隔规范,例如“ P35D”,“ P1DT24M39S”等。

我选择这个的原因:

  1. 这很简单。 如果您让用户选择特定的时间间隔,那么我假设您有一个表单,其中包含针对不同时间单位的不同输入。 从这样的输入中创建这些字符串之一,而不是在时间单位之间进行转换以存储一个int,将是非常简单的。

  2. 它相对紧凑。 不一样紧凑,如果你没有将其转换为一个时间单位,并存储为一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM