gpt4 book ai didi

mysql - 将出生日期存储在数据库中作为 UNIX 时间?

转载 作者:可可西里 更新时间:2023-11-01 07:20:01 24 4
gpt4 key购买 nike

我想将出生日期作为 UNIX 时间戳存储在我的数据库中,因为这样可以保持数据库较小并加快查询速度。

但是,当使用strtotime将出生日期转换为UNIX时间时,会输出错误的值,即输入的值相差一小时。我知道设置 date_default_timezone_set('UTC'); 会输出正确的 UNIX 时间出生日期,但出生日期与某人居住的地方无关,对吧?无论某人住在哪里,出生日期都会保持出生日期不变。

举个例子

$bday = 20;
$bmonth = 6;
$bYear = 1993;

strtotime($cBday.'-'.$cBmonth.'-'.$cByear) // output: 740527200 == Sat, 19 Jun 1993 22:00:00

PS:数据库字段定义为:bDate int(4) UNSIGNED

最佳答案

UTC 不是整个日历日期(例如出生日期)的理想选择。

我的出生日期是 1976-08-27 .不是1976-08-27T00:00:00Z .

  • 我目前住在美国太平洋时区。

  • 我的下一个生日来自 2016-08-27T00:00:00-07:00直到 2016-08-28T00:00:00-07:00

  • 在 UTC 中,这相当于 2016-08-27T07:00:00Z直到 2016-08-28T07:00:00Z

当然,如果我在那之前搬到不同的时区,我会在一组完全不同的范围内庆祝我的生日。

  • 如果我搬到日本,那么我的生日会提前 16 个小时。

  • 我的下一个生日是 2016-08-27T00:00:00+09:00直到 2016-08-28T00:00:00+09:00

  • 在 UTC 中,这相当于 2016-08-26T15:00:00Z直到 2016-08-27T15:00:00Z

因此,出生日期(或周年纪念日、雇用日期等)应存储为简单的年月日。没有时间,也没有时区。

在 MySQL 中,使用 DATE类型。不要使用 DATETIME , TIMESTAMP或包含 Unix 时间的整数。

还要考虑到年龄评估取决于此人当前所在的时区,而不是他们出生的时区。如果询问者不知道此人的位置 - 那么询问者所在的时区才是相关的。 “根据你的说法,你几岁了?”不一定与“根据我的说法,你多大了?”。

当然,您居住的地方实际上并不能使您变老或变年轻,但这取决于我们作为人类如何根据本地日历评估年龄。如果你改为问“我有多少分钟?”那么答案取决于您出生的瞬时时间点——可以用 UTC 来衡量,但通常会以本地时间和时区的形式给出。但是,在通常情况下,人们通常不会收集到那种程度的详细信息。

关于mysql - 将出生日期存储在数据库中作为 UNIX 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com