【问题标题】:Prevent inserting 0 year into db - time difference防止在数据库中插入 0 年 - 时差
【发布时间】:2026-02-08 04:05:02
【问题描述】:

看了一篇关于*中时差的文章URL

$datetime1 = new DateTime("2010-06-20");

$datetime2 = new DateTime("2011-06-22");

$difference = $datetime1->diff($datetime2);

echo 'Difference: '.$difference->y.' years, ' 
                   .$difference->m.' months, ' 
                   .$difference->d.' days';

print_r($difference);

如你所知,这是一个计算时差的代码,我需要一个时间差异来插入数据库,但如果时间差异小于 0 年,它也会插入 0 年,我该如何防止这种情况?

【问题讨论】:

  • insert into db - 关键列的类型是什么?
  • 那么,您在该列中有0 years, 0 months, 2 days 这样的值吗?
  • 是的,但如果年份和月份为 0,我不想插入零,我只想插入几天。
  • 另外,也可能存在具有 0 years, 1 months, 0 days 这样的值的情况。到底应该是1 months

标签: php html time difference


【解决方案1】:

只需用foreach 循环遍历ymd 值,如果它们在每种情况下的总和都超过0,则将它们相加?

$datetime1 = new DateTime("2010-06-20");
$datetime2 = new DateTime("2011-06-22");

$difference = $datetime1->diff($datetime2);

$description = [];
foreach (["year", "month", "day"] as $unit) {
    $value = $difference->{substr($unit, 0, 1)};
    switch ($value) {
        case 0: break;
        case 1: $description[] = "1 $unit"; break;
        default: $description[] = "$value {$unit}s"; break;
    }
}
echo "Difference: " . implode(", ", $description);

【讨论】: