PHP 日期格式 - 我准备好打破一些东西
我有一个标准的“美国”方式来表达日期 - 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我不确定我是否很好地理解您的问题,但您可以使用
date
和mktime
函数的组合,如下所示: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
andmktime
functions, like that:http://php.net/manual/en/function.mktime.php
这就是我在 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"))
实际上@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
那么您可以使用 [
date_create_from_format
][1] 执行此操作,如下所示:对于 2 位数字格式,以下是格式,
注意: 上面的日期被解释为 2067 年 6 月 29 日 不是 1967 年 6 月 29 日 因为 PHP 对 2 位数年份的解释。我已经测试过,PHP 处理年份的时间为:
因此我建议使用四位数年份格式。
但是,如果您无法更改数据源,那么对于像您这样的日期,其中 69 是 1969 年,我会根据自己的条件转换之后的年份,如下所示:
在获得
$myDate
对象之后使用正确的日期使用date_format
并将其插入数据库。
[1]: https://www.php.net/manual/en/ datetime.createfromformat.php
Well you can use [
date_create_from_format
][1] for this as follows:For 2 digit format the following is the format,
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:
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:
After you have gotten the
$myDate
object with the correct date usedate_format
And insert this into DB.
[1]: https://www.php.net/manual/en/datetime.createfromformat.php
这会将您的标准日期转换为数据库所需的格式。
This will convert your standard date to the format your database requires.