如何在php中获得最早的日期时间?

All*_*ore 5 php datetime php-7

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

$date = new DateTime(0);
Run Code Online (Sandbox Code Playgroud)

但这不起作用。还有其他方法吗?

感谢您的任何投入。

Jos*_*son 7

你很近

$date = (new DateTime())->setTimestamp(0);
Run Code Online (Sandbox Code Playgroud)

1970 年 1 月 1 日

  • 或者实现相同效果的更短方法: $date = new DateTime('@0'); (6认同)

Dou*_*rne 5

我认为 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'));
Run Code Online (Sandbox Code Playgroud)


jrb*_*ard 3

echo date('d-m-Y', 0); // outputs: 01-01-1970
Run Code Online (Sandbox Code Playgroud)

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

  • 或 `echo date('dmY', PHP_INT_MIN)` 表示最早的可能日期而不是纪元 (5认同)