【问题标题】:How to get current date/time as a date object in PHP如何在 PHP 中获取当前日期/时间作为日期对象
【发布时间】:2012-06-14 20:39:55
【问题描述】:

你如何得到今天的日期,作为一个日期对象?

我正在尝试计算某个开始日期与今天之间的差异。以下将不起作用,因为getdate() 返回一个数组而不是日期对象:

$today = getdate();           
$start = date_create('06/20/2012');
$diff = date_diff($start, $today);

echo($today . '<br/>' . $start . '<br/>' . $diff);

输出:

数组 ([秒] => 8 [分钟] => 1 [小时] => 16 [mday] => 11 [wday] => 1 [mon] => 6 [year] => 2012 [yday] => 162 [工作日] => 星期一 [月] => 六月 [0] => 1339455668 )

DateTime 对象([date] => 2012-06-20 00:00:00 [timezone_type] => 3 [timezone] => America/Los_Angeles)

【问题讨论】:

    标签: php date datediff


    【解决方案1】:

    要获得天数的差异,请使用:

    $today = new DateTime('today');
    

    此对象中的时间将是 00:00:00

    如果您想要小时分钟和秒的差异,请使用:

    $now = new DateTime('now');
    

    【讨论】:

    • 一个非常重要的区别取决于用例。
    【解决方案2】:
    new DateTime('now');
    

    http://www.php.net/manual/en/datetime.construct.php

    比较很容易:

    $today = new DateTime('now');
    $newYear = new DateTime('2012-01-01');
    
    if ($today > $newYear) {
    
    }
    

    Op 的编辑 我只需要调用 date_default_timezone_set,然后这段代码就为我工作了。

    【讨论】:

    • 我认为明确的$today = new DateTime("now"); 更清楚,即使参数确实默认为“现在”。
    • 代码 $today = new DateTime('now'); 实际上抛出了某种错误。 (500 内部服务器错误)
    • @dbaseman 你能更具体一点吗?你运行的是什么版本的PHP? codepad.org/5lYyo8MC
    • 从 PHP 5.3.0 开始,您可以使用作为 DateTime 对象一部分的 diff 方法。 $difference = $today-&gt;diff($start);。这将返回一个 DateInterval 对象,您可以通过多种方式输出结果。 php.net/manual/en/class.dateinterval.php
    【解决方案3】:

    我最终使用 date_create 构造函数(无参数)来获取当前日期。

    $diff = date_diff(date_create('06/20/2012'), date_create());
    print_r($diff);
    

    输出:

    DateInterval 对象 ( [y] => 0 [m] => 0 [d] => 8 [h] => 6 [i] => 30 [s] => 40 [invert] => 1 [days ] => 8)

    我不知道为什么,但 Mike B 的回答(以及我为 DateTime 尝试的任何构造函数)在 PHP5/IIS 中为我​​抛出了一个错误。

    【讨论】:

    • 很高兴您找到了解决方案。如果您想知道为什么DateTime 无法实例化,您可以尝试打开错误报告。 500 错误是 IIS 告诉您 PHP 被拒绝的方式,但它并没有变得更具体。您可以通过将这些函数放在脚本的开头来加速错误报告:error_reporting(-1); ini_set('display_errors', 1); ini_set('display_startup_errors', 1);。 IIS 的错误日志也可能包含特定的错误消息。
    • @MikeB 谢谢。这是错误:依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。 一旦我调用 date_default_timezone_set,您的答案就有效。
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2010-10-03
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多