将碳解析为ISO8601

27
我正在尝试获取当前时间并按照以下格式进行格式化:
"2018-09-26T21:40:29+02:00"

但是当我尝试的时候:
$isoDate = \Carbon\Carbon::now()->format('c');

根据我的理解,将一个 c 传递给format函数会将其解析为ISO8601,但显然这并不是实际情况。
请问如何将当前时间解析为ISO8601或20181001T094006Z?任何帮助都将不胜感激。

2
@Devon https://wikipedia.org/wiki/ISO_8601 - Aladin Small
1
@Devon,我认为我的问题非常具有建设性,但由于我的声誉不佳,我成了钓鱼的好对象。因此,请再次阅读问题,其中指定了何种ISO格式:ISO8601或20181001T094006Z - Aladin Small
你至少试过阅读格式手册并使用现有字符(如YmdTHisZ)自己构建吗? - Devon
我尝试了一下,但是我得到的是 2018-09-26T21:40:29+02:00 ,这不符合我试图发送的 Web 服务的要求,因为他们想要像这样的东西:20181001T094006Z。我的意思是,我知道通过提取年份、月份等来解析它的丑陋方式,然后进行拼接,但我必须是缺少某些东西。 - Aladin Small
@Devon,就是这个\Carbon\Carbon::now()->format('YmdTHisZ')。我得到的结果是:"20180926CEST2216517200",这就是我需要知道的,所以请将答案添加到问题中以标记问题已解决。谢谢。 - Aladin Small
显示剩余9条评论
3个回答

48
Carbon::now()->toISOString()

这将返回 2020-05-12T13:13:42.817684Z
Carbon::now()->toIso8601String()

这将返回 2020-05-12T13:15:32+00:00 使用corePHP
date(DateTime::ATOM, time())

这将返回 2021-08-22T15:26:48+10:00

37
echo Carbon::now()->toIso8601String();

13

8601没有具体的单一格式。它定义了各种可接受的格式,其中PHP的c代表最常见的形式之一。

没有特定的8601格式字符,但格式Ymd\THis\Z应该可以使用。 TZ是字面值,因此请使用反斜杠进行转义,以避免它们在格式字符串中被解释。确保仅使用UTC时间戳与此特定格式。

http://php.net/manual/en/function.date.php列出了所有可接受的格式字符。


你确定这是有效的ISO 8601格式吗?我认为年、月和日之间的连字符以及小时、分钟和秒之间的冒号都是必需的,不可选。 - jelhan
2
是的。正如我在答案和评论中所说,8601具有多种格式。 - Devon

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