【问题标题】:adding military time in string representation在字符串表示中添加军事时间
【发布时间】:2010-08-05 03:17:32
【问题描述】:

所以我想做的是以军事时间的形式将两个字符串加在一起。这是一个例子。

时间1 = "01:00"; Time2 = "04:30";

将两者相加将产生“05:30”。这看起来非常简单,但对于新学习者来说,这是漫长而漫长的一天。任何帮助将不胜感激。

【问题讨论】:

  • 忘记格式化或说军事时间。举个例子,你将如何将 Time1 和 Time2 相加得到“05:30”。做简单的加法只是四舍五入,这不是我需要的。

标签: php time addition


【解决方案1】:

你可以在 PHP 5.3 中做这样的事情:

$d = new DateTime("01:00");
$f = $d->add(new DateInterval("PT04H30M"));
echo $f->format("H:i"); //outputs 05:30

将 04:30 转换为 PT04H30M 应该很简单。请注意,这是否真的是您想要的取决于您所说的“04:30”是什么意思。此代码可能会或可能不会将 4*60+30 分钟与实际时间相加。

如果您的意思是“4 小时 30 分钟”,这始终是正确的。但是,如果您的意思是“4*60+30 分钟”,则取决于日期和时区。示例:

$d = new DateTime("2010-03-28 01:00 Europe/Lisbon");
$f = $d->setTimestamp($d->getTimestamp() + (4*60+30)*60);
echo $f->format("H:i"); //outputs 06:30 due to DST

PHP 5.2 的 last 案例(假设当前日期和默认时区)的替代实现是

echo date("H:i", strtotime("+4 hours +30 mins", strtotime("01:00")));

对于第一种情况,我们必须这样做:

date_default_timezone_set("UTC");
echo date("H:i", strtotime("+4 hours +30 mins", strtotime("01:00")));

【讨论】:

  • 并说我的主机没有更新到 5.3?任何建议(除了明显的切换主机!)
  • @Brian 我已经为 PHP 5.2 添加了解决方案。
  • 您先生,太棒了!正是我想要的。老实说,我花了 45 分钟在 Google 上搜索无止境。非常感谢。
  • 所以我只是去实现这个 - 加法部分效果很好。如果我准确地使用该代码,例如“13:45”+“02:30”,则代码会生成“16:15”。但是,如果我使用减法,结果会相差一小时。例如,“13:45”-“02:30”产生“12:15”。它与您上面的代码相同,但带有减号而不是加号。有什么想法吗?
  • @Brian 不,是echo date("H:i", strtotime("-2 hours -30 mins", strtotime("13:45")));。 + 号实际上没有任何作用。
猜你喜欢
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2015-04-18
  • 2013-10-27
相关资源
最近更新 更多