将UNIX时间戳转换为格式化日期字符串


183

使用PHP,我想将UNIX时间戳转换为类似于以下内容的日期字符串: 2008-07-17T09:24:17Z

如何转换的时间戳,如13336994392008-07-17T09:24:17Z

Answers:


320

尝试gmdate这样:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>

53
请不要gmdate()以格林尼治标准时间返回日期/时间。date()将返回本地日期/时间。
Matt K

5
在这种情况下,以上评论没有任何意义。如答案所示,将日期与第二个参数一起用作时间戳,将不会在本地时区中显示日期。日期将被打印,忽略时区信息,因为时间戳没有时区信息。第二个时间戳参数为1333699439的gmdate和date将打印相同的日期时间。
Tinus Tate

1
@MattK:这很有意义,因为Z表示UTC。Tinus:Unix时间戳不包含时区偏移量。dategmdate的输出会根据TZ变量(至少在* nix上)而有所不同
Gert van den Berg


如果此答案包括针对相反问题的解决方案(将格式化的日期转换为UNIX时间),也将是不错的选择。
OlleHärstedt'18

117

使用日期功能 date ( string $format [, int $timestamp = time() ] )

使用date('c',time())的格式转换为ISO 8601日期(PHP 5中添加) -2012-04-06T12:45:47+05:30

用于date("Y-m-d\TH:i:s\Z",1333699439)获取2012-04-06T13:33:59Z

以下是日期函数支持的一些格式

<?php
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
?>

如何将特定时间戳转换为“ c”?例如1333699439
Utku Dalmaz

这不起作用的日期(“ Ymd \ TH:i:s \ Z”,1333699439)我得到了2012-04-06EDT04:03:59-14400
Utku Dalmaz'4

@Ahmet-定义字符串时请注意使用双引号和单引号
Mark Ba​​ker

1
@ user2060451任何以反斜杠开头的内容都将在结果时间字符串中显示为文字字符
verbumSapienti 2015年

1
@ user2060451:Z应该表示UTC时间(在这种情况下,应使用gmdate ...)在您喜欢的研究资源中查看ISO8601信息。
Gert van den Berg

56

假设您使用的是PHP5.3,那么处理日期的现代方法是通过本机的DateTime类。要获取当前时间,您可以致电

$currentTime = new DateTime();

从特定的时间戳创建DateTime对象(即不是现在)

$currentTime = DateTime::createFromFormat( 'U', $timestamp );

要获取格式化的字符串,您可以调用

$formattedString = $currentTime->format( 'c' );

参见手册页


1
我该如何转换特定的时间戳?例如1333699439
Utku Dalmaz

@Norse当然我读了他的帖子。他需要的所有信息都在我的帖子中。他要做的只是阅读DateTime对象的PHP文档。我已经编辑了帖子,以使其更加清晰。DateTime对象是使用PHP的一种方式,应鼓励所有新手使用它。到目前为止,我是唯一提供该答案的人。顺便说一句,我发现您的评论有点激进,不太符合SO的精神。
liquorvicar'4

@Ahmetvardar请参阅我的编辑,尽管所有这些都在我提供链接的PHP文档中。我强烈建议您开始使用DateTime对象。它为日期/时间(包括时区等)提供了出色的支持
liquorvicar 2012年

18

设置默认时区以获得正确的结果非常重要

<?php
// set default timezone
date_default_timezone_set('Europe/Berlin');

// timestamp
$timestamp = 1307595105;

// output
echo date('d M Y H:i:s Z',$timestamp);
echo date('c',$timestamp);
?> 

在线转换帮助:http : //freeonlinetools24.com/timestamp


2
在ISO8601中,Z用于表示它是UTC时间,因此时区应设置为UTC
Gert van den Berg,



1

我发现此对话中的信息非常有用,以至于我只是想通过使用MySQL数据库中的时间戳和一些PHP来添加我的想法

 <?= date("Y-m-d\TH:i:s\+01:00",strtotime($column['loggedin'])) ?>

输出为:2017-03-03T08:22:36 + 01:00

非常感谢Stewe,您的回答对我来说是一个尤里卡。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.