Pie*_*iet 4 mysql sql date strtotime
我想将出生日期存储为我的数据库中的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
Run Code Online (Sandbox Code Playgroud)
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测量,但通常作为当地时间和时区给出.但是,在通常情况下,人们通常不会收集这种详细程度.
归档时间: |
|
查看次数: |
1244 次 |
最近记录: |