PHP 日期格式 - 我准备好打破一些东西

发布于 2024-12-05 10:44:16 字数 251 浏览 0 评论 0原文

我有一个标准的“美国”方式来表达日期 - 06/29/1967 或 6-29-67

strtotime()create_date()date()date_format() 所有这些都令人窒息。

数据库是 MySQl - 将日期存储为 yyyy-mm-dd 。

不幸的是,我无法更改架构以将日期存储为纪元时间戳或整数。

I've got a standard "US" way of expressing a date - 06/29/1967 or 6-29-67

strtotime() and create_date() and date() or date_format() ALL choke on this.

the db is MySQl - storing a date as yyyy-mm-dd.

Unfortunately, I can't change my schema to store my dates as epoch time stamps or integers.

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

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

发布评论

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

评论(5

红焚 2024-12-12 10:44:17

我不确定我是否很好地理解您的问题,但您可以使用 datemktime 函数的组合,如下所示:

echo date('Y-m-d', mktime(0, 0, 0, month, day, year));

http://php.net/manual/en/function.mktime.php

I'm not sure if I understand your problem well, but you can use a combination of date and mktime functions, like that:

echo date('Y-m-d', mktime(0, 0, 0, month, day, year));

http://php.net/manual/en/function.mktime.php

万水千山粽是情ミ 2024-12-12 10:44:17

这就是我在 PHP/MySQL 设置中所做的事情:

创建一个日期对象:
$date = new DateTime(null, new DateTimeZone("UTC"));

将日期保存到数据库中:
$dateString = $date->format("Ymd H:i:s");

从数据库检索日期:
$检索日期字符串 =
$retrievedDate = new DateTime($retrievedDateString, new DateTimeZone("UTC"))

This is what I've been doing with my PHP/MySQL setup:

Create a date object:
$date = new DateTime(null, new DateTimeZone("UTC"));

Save date in DB:
$dateString = $date->format("Y-m-d H:i:s");

Retrieve date from DB:
$retrievedDateString =
$retrievedDate = new DateTime($retrievedDateString, new DateTimeZone("UTC"))

望喜 2024-12-12 10:44:17

实际上@Ramy Deeb 回答了我想要的同样的事情,strtotime 几乎会转换成 UNIX 时间戳,几乎任何你扔给它的东西,而 date 只会使它成为你所需要的。

要检查 strtotime 可以处理什么,您可以检查 strtotime 的日期格式可接受格式的完整文档

Actually @Ramy Deeb replied the same thing I was going to, strtotime will convert into a UNIX timestamp almost anything you throw at it, and date will just make it what you need.

To check what strtotime can handle you can check the date formats for strtotime or the full documentation for acceptable formats

不念旧人 2024-12-12 10:44:17

那么您可以使用 [date_create_from_format][1] 执行此操作,如下所示:

$myDate = date_create_from_format('m/d/Y', '06/29/1967');

对于 2 位数字格式,以下是格式,

$myDate2 = date_create_from_format('n-d-y', '6-29-67');

注意: 上面的日期被解释为 2067 年 6 月 29 日 不是 1967 年 6 月 29 日 因为 PHP 对 2 位数年份的解释。我已经测试过,PHP 处理年份的时间为:

70 - 99   =>  1970 - 1999
00 - 69   =>  2000 - 2069

因此我建议使用四位数年份格式。
但是,如果您无法更改数据源,那么对于像您这样的日期,其中 69 是 1969 年,我会根据自己的条件转换之后的年份,如下所示:

// if the date is wrongly interpreted as 2000+, change it to 1900 one
// here I have choosen range '38 - 99' as '1938 - 1999' 
if(date_format($myDate2, 'Y') > 2038)
    date_sub($myDate2, date_interval_create_from_date_string('100 years'));

在获得 $myDate 对象之后使用正确的日期使用 date_format

$db_date_str = date_format($myDate, 'Y-m-d');

并将其插入数据库。
[1]: https://www.php.net/manual/en/ datetime.createfromformat.php

Well you can use [date_create_from_format][1] for this as follows:

$myDate = date_create_from_format('m/d/Y', '06/29/1967');

For 2 digit format the following is the format,

$myDate2 = date_create_from_format('n-d-y', '6-29-67');

NOTE: The above date is interpreted as 29th June 2067 NOT 29th June 1967 because oh PHP's interpretation of 2 digit years. I have tested and PHP treats years from:

70 - 99   =>  1970 - 1999
00 - 69   =>  2000 - 2069

Thus i recommend using four digit year format.
But if you cannot change the data source, then for a date like yours where 69 is 1969, I would convert the year afterwards as per my own condition, like this:

// if the date is wrongly interpreted as 2000+, change it to 1900 one
// here I have choosen range '38 - 99' as '1938 - 1999' 
if(date_format($myDate2, 'Y') > 2038)
    date_sub($myDate2, date_interval_create_from_date_string('100 years'));

After you have gotten the $myDate object with the correct date use date_format

$db_date_str = date_format($myDate, 'Y-m-d');

And insert this into DB.
[1]: https://www.php.net/manual/en/datetime.createfromformat.php

坚持沉默 2024-12-12 10:44:16

这会将您的标准日期转换为数据库所需的格式。

date('Y-m-d', strtotime('06/29/1967'));

This will convert your standard date to the format your database requires.

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