如何使用 php 创建零日期时间?

Posted

技术标签:

【中文标题】如何使用 php 创建零日期时间?【英文标题】:How can I create a zero DateTime with php? 【发布时间】:2020-03-05 18:10:05 【问题描述】:

我需要用 DateTime() 创建一个空日期。所以,全为零。时间应该这样显示:0000:00:0:00:00

我尝试过的:

$date = new DateTime("2019-05-09 12:07");
$date->setTime(0, 0);
$date->setDate(0, 0, 0);
echo $date->format("Y:W:j:H:i");

输出

-0001:49:30:00:00

而不是0000:00:0:00:00

我可以做些什么来实现零日期时间?

【问题讨论】:

如果您打开日历,您会发现我们从来没有零日、月或年。您不能创建这样的日期。 @Dharman,零年是可能的(我在那里:()$date->setDate(0, 1, 1);你得到0000:01:01:00:00 【参考方案1】:

当然不是..! 尽管您可以使用 php 辅助函数(在后面使用 DateTime 类)创建任何日期,但您希望仅使用 Zeor Time 的日期

$date = date_create('now'); // or any '1970-01-01'
$date = date_format($date, 'Y-m-d 00:00:00');
// or
$date = date('Y-m-d 00:00:00', strtotime('2021-12-21'));
// or
$date = date('Y-m-d 00:00:00');

输出:“2021-12-21 00:00:00”

【讨论】:

【参考方案2】:

不,您不能从 DateTime() 生成日期时间 0000:00:0:00:00

php > echo (new DateTime("0000-00-00 00:00:00"))->format("Y-W-j H:i");
-0001-49-30 00:00
php > echo (new DateTime())->setISODate(0,0,0)->setTime(0,0,0,0)->format("Y-W-j H:i");
-0001-52-26 00:00

【讨论】:

【参考方案3】:

更多的是解释出了什么问题而不是如何实现你所追求的——即使它是可能的。

从日期的角度来看 - 0 对月份和日期都无效。在manual 中有示例

示例 #2 超出范围的值被添加到其父值中

所以如果你的天数大于一个月的天数,它会在下个月达到

在您的情况下几乎相反,数字小于月初。所以0作为月份和日期,它将作为-1,所以如果你将它格式化为

echo $date->format("Y:m:d:H:i");

输出是

-0001:11:30:00:00

如您所见,日期和月份是 0-1(11 和 30),而这已经溢出到带有 -1 的年份。

【讨论】:

那么,有没有办法创建一个零日期时间? 由于日月不能为零,我认为不太可能。

以上是关于如何使用 php 创建零日期时间?的主要内容,如果未能解决你的问题,请参考以下文章

将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?

如何从Javascript日期中减去php日期

pgSQL:插入日期格式(前导零)?

使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?

转换零日期时间与允许零日期时间

获取从日期到月底 PHP 的秒数