使用gmstrftime显示时间的问题

时间:2014-02-03 06:04:31

标签: php

当我试图在gmstrftime.it结果20:26中打印160000但是对于80000它会给出22:13。我不知道为什么会发生这种情况。对gmstrftime有什么限制吗?

echo gmstrftime('%H:%M', 160000);

它给出20:26。

echo gmstrftime('%H:%M', 80000);

它给出了22:13

2 个答案:

答案 0 :(得分:0)

正如deceze所指出的那样,第二个arg是时代或unix时间。自1970年1月1日00:00以来的秒数。如果你离开第二个arg,你将获得当前时间。

<?php
  $time1 = strtotime("2014-02-03 20:26");
  echo "First time (".date('c', $time1).") in epoch: $time1\n";
  echo gmstrftime('%H:%M', $time1)."\n";
  $time2 = strtotime("2014-02-03 22:13");
  echo "Second time (".date('c', $time2).") in epoch: $time2\n";
  echo gmstrftime('%H:%M', $time2)."\n\n";

?>

插入$ time1和$ time2的不同日期以查看纪元时间。

答案 1 :(得分:0)

160000不是PHP(或其他常见系统)定义时间戳的任何时间戳。你所拥有的只是一个以“军事时间”表示为整数的时间。首先,任何gm函数都可能不是您想要使用的函数,因为您从这个“时间戳”开始缺少时区信息,因此转换为GM时间是不明确的,如果不是不可能的话。

您可以做的最好的事情是:

$timestamp = DateTime::createFromFormat('His', sprintf('%06d', 160000))->format('U');
echo strftime('%H:%M', $timestamp);