如何在 PHP 中保存早于时间戳的日期

发布于 2024-11-16 21:49:16 字数 300 浏览 0 评论 0原文

这应该是一个简单的问题,但我就是找不到答案。

我有一个输入字段,用户在其中输入他的生日日期(DD.MM.YYYY),并使用 strtotime() 将其插入 MySQL 中的整数字段,因为它比日期时间更快(而且我有很多记录)。

但显然会有早于 1970 年 1 月 1 日的用户,因此时间戳将为零。 在网页上我想显示用户的年龄。如果他出生于1960年,那么他今年已经51岁了。 我知道我可以将 MySQL 字段更改为 DATETIME,但 PHP 仍然是计算用户年龄的字段,并且它使用 UNIX 时间戳。

那么,我应该如何组织呢? 谢谢!

This should be an easy one but I just can't find the answer.

I have an input field in which the user enters his birthay date (DD.MM.YYYY) and with strtotime() I insert it into integer field in MySQL because it's faster that datetime (and I have a lot of records).

But obviously there will be users older than 1.1.1970 so the timestamp would be zero.
On the webpage I want to show how old is the user. So if he is born in 1960 he would be 51 years old.
I know that I could change MySQL field to DATETIME but still the PHP would be the one to calculate the age of user and it uses UNIX timestamp.

So, how should I organize it?
Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

如梦 2024-11-23 21:49:16

在 PHP 中处理日期和时间时,您应该使用 DateTime 对象。它在解析日期格式时非常灵活,它可以计算两个日期之间的差异,并且不存在 1970 或 2038 的问题。

You should use the DateTime object when handling dates and times in PHP. It is very flexible when parsing date formats, it can calculate the difference between two dates and it has no 1970 or 2038 problem.

七七 2024-11-23 21:49:16

您应该使用MySQL DATETIME,在sql查询中计算。当您保存到数据库时,使用 php date() 函数转换为 mysql DATETIME

You should use MySQL DATETIME, calculate in sql query . use php date() function to convert to mysql DATETIME when you save into database

浅唱ヾ落雨殇 2024-11-23 21:49:16

您必须使用 DateTime 对象,您可以在此处看到一个示例代码:

<?php

$date = new DateTime("1960-05-06");
$timestamp = $date->getTimestamp();
echo $timestamp; //-304707600

echo "\n";

$date = new DateTime();
$date->setTimestamp($timestamp);
$birthday = $date->format("Y-m-d");
echo $birthday; //1960-05-06

echo "\n";

echo date("Y") - $date->format("Y"); //55 years old for now (2015)

?>

输出:

-304732800
1960-05-06
55

此处在线测试: https://ideone.com/sKjBWS

You must use DateTime object, You can see one sample code here:

<?php

$date = new DateTime("1960-05-06");
$timestamp = $date->getTimestamp();
echo $timestamp; //-304707600

echo "\n";

$date = new DateTime();
$date->setTimestamp($timestamp);
$birthday = $date->format("Y-m-d");
echo $birthday; //1960-05-06

echo "\n";

echo date("Y") - $date->format("Y"); //55 years old for now (2015)

?>

Output:

-304732800
1960-05-06
55

Online test here: https://ideone.com/sKjBWS

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文