【问题标题】:Set time in php to 00:00:00将 php 中的时间设置为 00:00:00
【发布时间】:2011-10-14 13:57:15
【问题描述】:

我需要显示时间,但它必须从 00:00:00 开始?我有以下内容,但它使用当前时间。

print(date("H:i:s"));

【问题讨论】:

  • 您能否详细说明您正在尝试做的事情?可能是我,但我不明白你想做什么。
  • @Aron 别担心 - 不是你。
  • 我认为他想要一个“增量”时间,即 C# Stopwatch 类的 PHP 等价物。
  • 你在尝试做某种计时器吗?
  • echo '00:00:00' tada!

标签: php time


【解决方案1】:

作为mktime() 的替代品,请尝试更新的DateTime 类,例如

$dt = new DateTime;
$dt->setTime(0, 0);
echo $dt->format('H:i:s');

// Add one hour
$dt->add(new DateInterval('PT1H'));
echo $dt->format('H:i:s');

更新

DateInterval 的灵活性使其非常适合用作计时器,例如

// add 2 years, 1 day and 9 seconds
$dt->add(new DateInterval('P2Y1DT9S'));

【讨论】:

  • P2Y1DT9S 代表什么?能用分解的形式解释吗?我在 DateInterval 类中找不到解释
  • @Shiro P = 周期,2Y = 2 年,1D = 1 天,T = 时间,9S = 9 秒
  • 是的,PHP DateTime 类(以及它的相关类,如 DateInterval)一般来说非常性感且易于使用......而且比“旧”方式更容易且更少hack-y的处理日期。这是对这个问题的一个很好的答案,但我也只想对任何阅读本文的人说,如果您正在做任何与日期或时间有关的事情,那么值得您花时间学习如何使用它们。
【解决方案2】:

如果您想从当前日期的午夜开始,请使用 mktime()

<?php

echo date('l jS \of F Y h:i:s A',mktime(0,0,0));

?>

输出

Friday 14th of October 2011 12:00:00 AM

http://codepad.org/s2NrVfRq

mktime() 中,您为hours, minutes, seconds, month, day, year 传递参数,因此将hours, minutes, seconds 设置为0 以获得today at midnight。 (注意,正如 Phil 指出的那样,mktime() 的参数是可选的,您可以将 month, day, year 保留在外,它将默认为当前日期。

mktime() 函数返回一个 unix 时间戳,表示自 unix 纪元(1970 年 1 月 1 日)以来的秒数。您可以以秒或秒的倍数从它开始计数。

<?php

// $midnight = mktime(0,0,0,date('m'),date('d'),date('Y'));
// The above is equivalent to below
$midnight = mktime(0,0,0);

echo date('l jS \of F Y h:i:s A',$midnight)."\n";
echo date('l jS \of F Y h:i:s A',$midnight+60)."\n"; // One minute
echo date('l jS \of F Y h:i:s A',$midnight+(60*60))."\n"; // One hour

?>

输出

Friday 14th of October 2011 12:00:00 AM
Friday 14th of October 2011 12:01:00 AM
Friday 14th of October 2011 01:00:00 AM

http://codepad.org/FTr98z1n

【讨论】:

  • 如果您希望使用当前值,您可以省略 mktime() 的月、日和年参数
  • 查看 ladenedge 的回答。您只需将它们排除在外,只传递三个参数
  • 好的,我明白你的意思了。这是有道理的。
【解决方案3】:

date() 在您未传入显式时间戳时使用当前时间。请参阅date documentation 中的可选参数。

如果您想明确格式化午夜,请使用:

date("H:i:s", mktime(0, 0, 0));

【讨论】:

    【解决方案4】:

    尝试使用这种语法:

    print(date("H:i:s", 0));
    

    print(date("H:i:s", 10)); // 10 seconds
    

    【讨论】:

    • 小心date() 时区敏感。 1970 年 1 月 1 日午夜过后 0 或 10 秒看起来会完全不同,具体取决于您所在的时区
    • 0 的含义会根据你的 PHP 版本而改变。从 5.1.0 开始,0 表示 Fri, 13 Dec 1901 20:45:54。
    • 是的,对于 UNIX 时间,他应该使用 mktime(...)
    • @ladenedge 不,0 仍然对应于格林威治标准时间 1970 年 1 月 1 日午夜。 Unix 时间戳是有符号整数
    • 好吧闭嘴。不错,菲尔。
    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多