如何在mysql中以年、月、日为单位存储持续时间或期间?

问题描述 投票:0回答:1

我想限制员工在某个部门注册的年龄。 情况是: 员工可以注册到部门,每个部门都有年龄限制, 例如,年龄小于40岁11个月零5天的员工可以注册到A部门。

如何在mysql数据库中存储“40岁11个月零5天”作为年龄限制?

让我困惑的是,如果我将字段设置为整数,然后将其转换为像 1000 天这样的天数,问题是,一年中的天数可能不同, 所以,转换 40 年 11 个月零 5 天应该取决于某个日期或我不太明白的东西。

架构

部门

division_id[主键]、姓名、年龄限制

注册员工

division_id[ForeignKey]、employee_id[ForeignKey]、registration_status

员工

employee_id[PrimaryKey]、姓名、性别、生日

我需要计算一个员工年龄,并使用carbon diffInDays与age_limit进行比较,让员工注册

仅供参考,我正在使用 laravel 10、Carbon 库和 mysql 数据库

有什么解决办法吗?

我尝试在谷歌上搜索,但仍然没有得到预期的答案

mysql laravel database-design
1个回答
0
投票

您可以将年龄限制作为整数存储在 MySQL 数据库中,代表天数。

要计算以天为单位的年龄限制,您可以使用 PHP

DateTime
类创建日期间隔。这是一个例子:

$years = 40;
$months = 11;
$days = 5;

$interval = new DateInterval("P{$years}Y{$months}M{$days}D");
$now = new DateTime();
$then = $now->add($interval);

$ageLimitInDays = $now->diff($then)->days;

在此代码中,

DateInterval
创建 40 年 11 个月 5 天的日期间隔。
DateTime
用于获取当前日期和时间,
add
方法用于在当前日期上添加间隔。然后使用
diff
方法计算当前日期与间隔之后的日期之间的天数差异。

然后您可以将

$ageLimitInDays
存储在
divisions
表中作为
age_limit

要计算员工的年龄(以天为单位)并将其与年龄限制进行比较,您可以使用 Carbon 库:

$employeeBirthday = Carbon::parse($employee->birthday);
$employeeAgeInDays = $employeeBirthday->diffInDays(Carbon::now());

if ($employeeAgeInDays <= $division->age_limit) {
    // The employee can register
} else {
    // The employee cannot register
}
© www.soinside.com 2019 - 2024. All rights reserved.