日期和时间以24小时格式显示

27

我有一个格式为Fri, 15 Jan 2016 15:14:10 +0800的日期,我想要将时间显示为2016-01-15 15:14:10

我尝试过的方法是:

$test = 'Fri, 15 Jan 2016 15:14:10 +0800';
$t = date('Y-m-d G:i:s',strtotime($test));
echo $t;

但是它以这种格式显示日期:2016-01-15 7:14:10,应该是2016-01-15 15:14:10

我该怎么做呢?


你的服务器时区设置是什么? - Mark Baker
2个回答

60
使用H代替:
$test = 'Fri, 15 Jan 2016 15:14:10 +0800';
$t = date('Y-m-d H:i:s',strtotime($test));
echo $t;

H: 小时的24小时制,带前导零,从00到23

G也应该是一样的,但没有前导零。我怀疑你的PHP设置了不同于+0800的时区。你可以确认你的时区 (date_default_timezone_get()) 吗?

编辑

OP确认他的时区设为UTC,这就很合理地显示了早上7点,因为date使用了PHP的默认时区。

如果您想要“继承”时区,并获得更多灵活性,您应该切换到DateTime:

echo (new DateTime($test))->format("Y-m-d H:i:s");

date_default_timezone_get() 只显示 UTC。 - Pathik Vejani
我也尝试了 H 但没有成功,显示的是 2016-01-15 07:14:10 - Pathik Vejani
这就是原因。你正在输入来自比协调世界时晚8小时的时区的日期,这种情况下它对应于当地时间早上7点完全是有道理的。 - rdiz
那么现在我该做什么?我该如何设置? - Pathik Vejani
我没有点踩,所以我不知道。可能是因为你在创建问题之前似乎没有花太多精力进行研究或查阅PHP手册。 - rdiz

7

https://www.w3schools.com/php/php_date.asp

获取日期

date()函数的必需格式参数指定如何格式化日期(或时间)。

以下是一些常用于日期的字符:

  • d - 表示月中的某一天(01到31)
  • m - 表示月份(01到12)
  • Y - 表示四位数的年份
  • l(小写字母L)- 表示星期几

获取时间

以下是常用于表示时间的字符:

  • H - 小时的24小时制(00至23)
  • h - 带前导零的12小时制小时数(01至12)
  • i - 带前导零的分钟数(00至59)
  • s - 带前导零的秒数(00至59)
  • a - 小写的上午和下午标识(am或pm)

https://www.php.net/manual/en/datetime.format.php

public DateTime::format ( string $format ) : string

<?php

    $datetime = new DateTime( "now", new DateTimeZone( "Europe/Bucharest" ) );

    echo $datetime->format( 'Y-m-d H:i:s' );

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