如何在php中将ISO8601转换为日期格式

34

如何将这个时间(使用ISO8601格式)转换为:2014-03-13

这个时间(使用MySQL DATE格式):2014-03-13

在php中应该怎么做?


1
嗯,看起来截取输入中 T 之前的部分会给你想要的结果。你尝试过使用 substr 进行操作吗? - Jon
可能是重复的问题:使用PHP:如何将ISO8601日期转换为不同格式 - i'm PosSible
6个回答

52

试试这个

$date = '2014-03-13T09:05:50.240Z';

$fixed = date('Y-m-d', strtotime($date));

完整的日期函数文档可以在这里找到:http://php.net/manual/en/function.date.php

PHP函数“strtotime”所做的就是将您的时间字符串转换为Unix时间戳。

希望我能帮到您 :)

P.s.: 如果strtotime返回0,请尝试使用以下内容:

$date = '2014-03-13T09:05:50.240Z';

$fixed = date('Y-m-d', strtotime(substr($date,0,10)));

2
非常感谢,它太棒了!您关于使用 date('Y-m-d', strtotime(substr($date,0,10))) 如果返回 0 的最后一条注释是完美的。那是对我很有帮助的!谢谢... :) - Neel

18

自从PHP 5.2.0版本以来,您也可以使用OOPDateTime()(如果您更喜欢OOP的话):

$now = new DateTime("2014-03-13T09:05:50.240Z");
echo $now->format('Y-m-d');    // MySQL datetime format

4

没有理由使用低效的时间函数。最有效的方法是简单地提取前10个字符:

substr($date,0,10)

编程经验超过10000年的人,可以使用以下技巧:

substr($date,0,strpos($date,"T"))

3
那将在公元10000年发生破裂。 - ViBoNaCci
1
一年10000个解决方案已经添加 ;) - Wiimm

3

只需使用strtotime将日期描述转换为Unix时间戳,然后使用日期格式进行格式化。

尝试一下,肯定会对您有帮助。

$date = '2014-03-13T09:05:50.240Z';

$fixed = date('Y-m-d', strtotime($date));

谢谢Mitul。看起来它可以工作,但如果格式与我的原始问题不同,例如:Thu Mar 13 2014 17:21:17 GMT+0530 (India Standard Time),在转换后,$fixed值输出为1970-01-01。那么这种格式有不同的方法吗? - Neel
1
实际上,@ThatMSG建议使用date('Y-m-d', strtotime(substr($date,0,10)))是有效的!感谢Mitul的支持! - Neel
1
@blackops_programmer:无论您发送什么格式,它肯定会起作用。请查看您的示例 - Mitul Shah

0

0
今天我发布了一个interitty/utils包,它处理ISO-8601格式,以及可能涉及到的所有变体。
希望它也能对你有所帮助。
$dateTimeFactory = new Interitty\Utils\DateTimeFactory();
$dateTime = $dateTimeFactory->createFromIso8601('1989-12-17T12:00:00Z');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接