【问题标题】:How do I get the earliest possible datetime in php?如何在 php 中获取最早的日期时间?
【发布时间】:2016-10-17 21:22:18
【问题描述】:

我的理解是 php 中的日期时间表示为某个日期之后的毫秒数(我认为是 1960 年的某个时间?)。如何构造一个代表php中最早允许日期的日期时间?一个可能的语法示例是:

$date = new DateTime(0);

但这不起作用。有没有其他方法可以做到这一点?

感谢您的任何意见。

【问题讨论】:

  • 只是好奇:你为什么需要它?
  • 不管怎样,你可以试试$date = new DateTime()->setTimestamp(0);
  • 我正在循环一个日期时间数组以获取最新的日期时间,并且需要初始化我用来存储当前最新日期时间的变量,该变量绝对早于数组的任何元素.否则,可能会出现所有日期时间都发生在此变量的初始值之前的情况,然后将错误地返回为最新的日期时间。
  • 那么我建议使用null,像if ($min==null || $current<$min) $min = $current;这样的结构当然会用适当的方法调用来改变<
  • 这很好地解决了我的问题。谢谢。

标签: php datetime php-7


【解决方案1】:

你已经很接近了

$date = (new DateTime())->setTimestamp(0);

将给出 1970 年 1 月 1 日

【讨论】:

  • 或者更短的实现相同的方法:$date = new DateTime('@0');
  • 除非这不是最小日期:当 DateTime 传递一个 unix 时间戳时,它会计算“从纪元开始”,而不是“从允许日期开始计算”。
【解决方案2】:

我认为 DateTime 对象将接受的最小和最大日期如下(在 PHP 7.4 的 64 位机器上,使用 PHPUnit 演示)。这对于为 DateTime 和 Carbon 提供日期验证器的默认最小值和最大值很有用。此答案也发布在 DateTime::__construct() 的 PHP 手册页的用户贡献注释中。

如果您想获得非常精确的信息,请修改下面的代码以考虑时间和时区。

    // smallest date
    $input = '-9999-01-01';
    $dt = new \DateTime($input);
    self::assertEquals($input, $dt->format('Y-m-d'));
    $input = '-10000-12-31';
    $dt = new \DateTime($input);
    self::assertEquals('2000-12-31', $dt->format('Y-m-d'));

    // largest date
    $input = '9999-12-31';
    $dt = new \DateTime($input);
    self::assertEquals($input, $dt->format('Y-m-d'));
    $input = '10000-01-01';
    $dt = new \DateTime($input);
    self::assertEquals('2000-01-01', $dt->format('Y-m-d'));

【讨论】:

    【解决方案3】:
    echo date('d-m-Y', 0); // outputs: 01-01-1970
    

    epoch 0 给出 1970 年 1 月 1 日的 unix 时间戳 01-01-1970 或 00:00:00 UTC。

    【讨论】:

    • echo date('d-m-Y', PHP_INT_MIN) 表示最早的日期而不是纪元
    • date('d-m-Y', PHP_INT_MIN) 返回 292277026596-12-04 07:37:10.000000 :-P
    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2011-09-22
    • 2023-03-22
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多