Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用gmstrftime显示时间时出现问题_Php - Fatal编程技术网

Php 使用gmstrftime显示时间时出现问题

Php 使用gmstrftime显示时间时出现问题,php,Php,当我尝试在gmstrftime中打印160000时,结果是20:26,但对于80000,结果是22:13。我不知道为什么会这样。他们对gmstrftime有什么限制吗 echo gmstrftime('%H:%M', 160000); 时间是20:26 echo gmstrftime('%H:%M', 80000); 它给出了22:13,正如deceze指出的,第二个参数是纪元或unix时间。自1970年1月1日00:00以来的秒数。如果不使用第二个参数,则将获得当前时间 <?php

当我尝试在gmstrftime中打印160000时,结果是20:26,但对于80000,结果是22:13。我不知道为什么会这样。他们对gmstrftime有什么限制吗

echo gmstrftime('%H:%M', 160000);
时间是20:26

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

它给出了22:13,正如deceze指出的,第二个参数是纪元或unix时间。自1970年1月1日00:00以来的秒数。如果不使用第二个参数,则将获得当前时间

<?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插入不同的日期以查看纪元时间。

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

您所能做的最好的事情是:

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

第二个参数是UNIX时间戳,而不是“16:00:00”的“160000”。@deceze:那么解决这个问题的方法是什么呢。因为我正在将时间戳保存为数据库中的整数,在前端我正在对时间戳进行一些计算并打印最终输出。它给出了错误解析错误:语法错误,意外的“(”,需要T_字符串或T_变量或“{”或“$”