在 PHP 中将一种日期格式转换为另一种日期格式
PHP 中是否有一种简单的方法将一种日期格式转换为另一种日期格式?
我有这个:
$old_date = date('y-m-d-h-i-s'); // works
$middle = strtotime($old_date); // returns bool(false)
$new_date = date('Y-m-d H:i:s', $middle); // returns 1970-01-01 00:00:00
但我当然希望它返回当前日期而不是黎明时分。我做错了什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
date()
的第二个参数需要是正确的时间戳(自 1970 年 1 月 1 日以来的秒数)。您正在传递一个 date() 无法识别的字符串。您可以使用 strtotime() 进行转换将日期字符串转换为时间戳。但是,即使 strtotime() 也无法识别 ymdhis 格式。
PHP 5.3 及更高版本
使用
DateTime::createFromFormat
。它允许您使用
date()
语法指定精确的掩码来解析传入的字符串日期。PHP 5.2 及更低版本
您必须使用
substr()
手动解析元素(年、月、日、时、分、秒)并将结果传递给 mktime() 将为您构建一个时间戳。但这是很多工作!我建议使用 strftime() 可以理解的不同格式。 strftime() 可以理解任何输入的日期,
乔下次在冰上滑倒的时间
。例如,这有效:The second parameter to
date()
needs to be a proper timestamp (seconds since January 1, 1970). You are passing a string, which date() can't recognize.You can use strtotime() to convert a date string into a timestamp. However, even strtotime() doesn't recognize the
y-m-d-h-i-s
format.PHP 5.3 and up
Use
DateTime::createFromFormat
. It allows you to specify an exact mask - using thedate()
syntax - to parse incoming string dates with.PHP 5.2 and lower
You will have to parse the elements (year, month, day, hour, minute, second) manually using
substr()
and hand the results to mktime() that will build you a timestamp.But that's a lot of work! I recommend using a different format that strftime() can understand. strftime() understands any date input short of
the next time joe will slip on the ice
. for example, this works:最简单的方法是
你首先给它 $dateString 的格式。然后你告诉它你想要 $newDateString 的格式。
这也避免了使用 strtotime,这可能很难在次。
如果您不从一种日期格式转换为另一种日期格式,而只是想要特定格式的当前日期(或日期时间),那么这就更容易了:
另一个问题也指同一主题: 转换日期格式 yyyy-mm-dd =>日-月-年。
The easiest way to do this is
You are first giving it the format $dateString is in. Then you are telling it the format you want $newDateString to be in.
This also avoids the use of strtotime, which can be hard to work with at times.
If you are not transforming from one date format to another, but just want the current date (or datetime) in a specific format then it's even easier:
This other question also refers to the same topic: Convert date format yyyy-mm-dd => dd-mm-yyyy.
基础知识
将一种日期格式转换为另一种日期格式的最简单方法是使用
strtotime()
与 <代码>日期()。strtotime()
会将日期转换为 Unix 时间戳。然后可以将该 Unix 时间戳传递给date()
以将其转换为新格式。或者作为一句话:
请记住
strtotime()
要求日期位于 有效格式。未能提供有效的格式将导致strtotime()
返回 false,这将导致您的日期为 1969-12-31。使用
DateTime()
从 PHP 5.2 开始,PHP 提供了
DateTime()
类为我们提供了更强大的工具来处理日期(和时间)。我们可以使用DateTime()
重写上面的代码,如下所示:使用 Unix 时间戳
date()
将 Unix 时间戳作为其第二个参数,为您返回格式化的日期:DateTime() 通过在时间戳前添加
@
来处理 Unix 时间戳:如果您拥有的时间戳以毫秒为单位(可能以
000
结尾)和/或时间戳有 13 个字符长)您需要将其转换为秒,然后才能将其转换为其他格式。有两种方法可以做到这一点:substr()< 修剪掉最后三位数字/code>
可以通过多种方式实现修剪最后三位数字,但使用
substr()
是最简单的:您还可以通过除以将时间戳转换为秒1000. 由于时间戳对于 32 位系统来说太大,无法进行数学计算,因此您需要使用 BCMath 库以字符串形式进行数学运算:
要获取 Unix 时间戳,您可以使用
strtotime()
返回 Unix 时间戳:使用 DateTime(),您可以使用
DateTime::getTimestamp()
如果您运行的是 PHP 5.2,您可以请改用
U
格式选项:使用非标准且不明确的日期格式
不幸的是,并非开发人员必须使用的所有日期都采用标准格式。幸运的是 PHP 5.3 为我们提供了一个解决方案。
DateTime::createFromFormat()
允许我们告诉 PHP 日期字符串的格式,以便它可以成功解析为 DateTime 对象以进行进一步操作。在 PHP 5.4 中,我们添加了在实例化时进行类成员访问的能力,这允许我们将
DateTime()
代码转换为一行代码:The Basics
The simplist way to convert one date format into another is to use
strtotime()
withdate()
.strtotime()
will convert the date into a Unix Timestamp. That Unix Timestamp can then be passed todate()
to convert it to the new format.Or as a one-liner:
Keep in mind that
strtotime()
requires the date to be in a valid format. Failure to provide a valid format will result instrtotime()
returning false which will cause your date to be 1969-12-31.Using
DateTime()
As of PHP 5.2, PHP offered the
DateTime()
class which offers us more powerful tools for working with dates (and time). We can rewrite the above code usingDateTime()
as so:Working with Unix timestamps
date()
takes a Unix timeatamp as its second parameter and returns a formatted date for you:DateTime() works with Unix timestamps by adding an
@
before the timestamp:If the timestamp you have is in milliseconds (it may end in
000
and/or the timestamp is thirteen characters long) you will need to convert it to seconds before you can can convert it to another format. There's two ways to do this:substr()
Trimming the last three digits can be acheived several ways, but using
substr()
is the easiest:You can also convert the timestamp into seconds by dividing by 1000. Because the timestamp is too large for 32 bit systems to do math on you will need to use the BCMath library to do the math as strings:
To get a Unix Timestamp you can use
strtotime()
which returns a Unix Timestamp:With DateTime() you can use
DateTime::getTimestamp()
If you're running PHP 5.2 you can use the
U
formatting option instead:Working with non-standard and ambiguous date formats
Unfortunately not all dates that a developer has to work with are in a standard format. Fortunately PHP 5.3 provided us with a solution for that.
DateTime::createFromFormat()
allows us to tell PHP what format a date string is in so it can be successfully parsed into a DateTime object for further manipulation.In PHP 5.4 we gained the ability to do class member access on instantiation has been added which allows us to turn our
DateTime()
code into a one-liner:试试这个:
Try this:
将
$date
从dd-mm-yyyy hh:mm:ss
转换为正确的 MySQL 日期时间我这样走:
To convert
$date
fromdd-mm-yyyy hh:mm:ss
to a proper MySQL datetimeI go like this:
以下是将日期转换为不同格式的简单方法。
The following is an easy method to convert dates to different formats.
你在这里做错了,这应该是
时间分隔符“:”
我认为这会有所帮助......
或者
you are doing wrong here, this should be
separator of time is ':'
I think this will help...
OR
这种本机方式将有助于将任何输入的格式转换为所需的格式。
This native way will help to convert any inputted format to the desired format.
strtotime 会解决这个问题。日期只是不一样,而且都是美国格式。
strtotime will work that out. the dates are just not the same and all in us-format.
您需要将 $old_date 转换回时间戳,如 日期函数 需要时间戳作为其第二个参数。
You need to convert the $old_date back into a timestamp, as the date function requires a timestamp as its second argument.
在 php 中更改日期格式的最简单方法
在 PHP 中,任何日期都可以使用不同的场景转换为所需的日期格式,例如将任何日期格式更改为日、日期月年
它将以以下非常好的格式显示日期
星期一, 2020 年 11 月 16 日
如果您现有的日期格式也有时间,例如,如果您的日期时间格式为 SQL 2020-11-11 22:00:00,您可以使用以下命令将其转换为所需的日期格式
它将显示日期以下格式美观
2020 年 11 月 15 日星期日 16:26:00
Easiest and simplest way to change date format in php
In PHP any date can be converted into the required date format using different scenarios for example to change any date format into Day, Date Month Year
It will show date in the following very well format
Mon, 16 Nov 2020
And if you have time as well in your existing date format for example if you have datetime format of SQL 2020-11-11 22:00:00 you can convert this into the required date format using the following
It will show date in following well looking format
Sun, 15 Nov 2020 16:26:00
这为我解决了,
输出:2018-04-18
This solved for me,
Output : 2018-04-18
试试这个:
Try this:
我知道这已经过时了,但是,在遇到一个在 API 中不一致地使用 5 种不同日期格式的供应商(以及使用从 5 到最新 7 的各种 PHP 版本的测试服务器)时,我决定编写一个通用转换器适用于多种 PHP 版本。
该转换器几乎可以接受任何输入,包括任何标准日期时间格式(包括带或不带毫秒)和任何纪元时间表示形式(包括带或不带毫秒),并将其转换为几乎任何其他格式。
调用它:
发送 null 格式将使函数返回 Epoch/Unix 时间的日期时间。否则,发送 date() 支持的任何格式字符串,以及用“.u”表示毫秒(我也处理毫秒,即使 date() 返回零)。
这是代码:
这是一些示例调用 - 您会注意到它还处理任何时区数据(尽管如上所述,任何非 GMT 时间都会在您的时区中返回)。
这是输出:
此版本中唯一没有的功能是能够选择您希望返回的日期时间所在的时区。最初,我编写此代码是为了将任何日期时间更改为大纪元时间,因此,我不需要时区支持。不过添加起来很简单。
I know this is old, but, in running into a vendor that inconsistently uses 5 different date formats in their APIs (and test servers with a variety of PHP versions from the 5's through the latest 7's), I decided to write a universal converter that works with a myriad of PHP versions.
This converter will take virtually any input, including any standard datetime format (including with or without milliseconds) and any Epoch Time representation (including with or without milliseconds) and convert it to virtually any other format.
To call it:
Sending null for the format will make the function return the datetime in Epoch/Unix Time. Otherwise, send any format string that date() supports, as well as with ".u" for milliseconds (I handle milliseconds as well, even though date() returns zeros).
Here's the code:
Here's some sample calls - you will note it also handles any time zone data (though as noted above, any non GMT time is returned in your time zone).
Here's the output:
The only thing not in this version is the ability to select the time zone you want the returned datetime to be in. Originally, I wrote this to change any datetime to Epoch Time, so, I didn't need time zone support. It's trivial to add though.
这是转换日期格式的另一种方法
This is the other way you can convert date format
仅使用字符串,对我来说是一个很好的解决方案,mysql 的问题较少。检测当前格式并在必要时更改它,此解决方案仅适用于西班牙语/法语格式和英语格式,不使用 php 日期时间函数。
使用
Just using strings, for me is a good solution, less problems with mysql. Detects the current format and changes it if necessary, this solution is only for spanish/french format and english format, without use php datetime function.
USE
为了完整起见,我使用 Carbon 库添加了一个答案,该库非常常见,并且在 Laravel 框架等大型项目中使用。
Carbon 构造函数 可以传递一个日期字符串(
strtotime()
) 或DateTime
对象。如果您正在处理无法轻松解析的日期字符串,Carbon 提供了Carbon::createFromFormat()
静态创建器方法。现在您已经有了一个原生 Carbon 对象,您可以使用
Carbon::format( )
方法以您需要的任何格式输出:有很多辅助方法可以快速输出某些格式,例如
Carbon::toDateTimeString()
其输出为MySQL 格式。For completeness I'm adding an answer using the Carbon library, which is very common and used in large projects like the Laravel framework.
The Carbon constructor can be passed a date string (anything that is recognized by
strtotime()
) or aDateTime
object. If you're dealing with a date string that can't be parsed easily, Carbon provides theCarbon::createFromFormat()
static creator method.Now that you have a native Carbon object, you can use the
Carbon::format()
method to output it in whatever format you need:There are a lot of helper methods to quickly output certain formats, such as
Carbon::toDateTimeString()
which outputs in MySQL format.TestDome 针对 php 开发人员的问题:
有效字符串具有 / 和 - 输出将类似于该
解决方案:
TestDome Question for php developer:
Valid String having / and - Output will like that
Solutions: