当前位置: 首页 > 面试题库 >

您如何解释新\ DateTime('0000-00-00 00:00:00')的结果?

元彦君
2023-03-14
问题内容

这是一个测试代码:

<?php

ini_set('date.timezone', 'Europe/London');    
$dt = new \DateTime('0000-00-00 00:00:00');

var_dump($dt);

提供:

object(DateTime)[1]
  public 'date' => string '-0001-11-30 00:00:00' (length=20)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/London' (length=13)

但这不是一个有效的日期。我不了解返回的值,尤其是月份……您能解释一下吗?


问题答案:

您在这里看到两种效果。第一个是您使用一种可以以多种形式书写的日期书写方式:

0000-01-01 same as  0000-01-01
0000-01-00 same as -0001-12-31
0000-00-01 same as -0001-12-01
0000-00-00 same as -0001-11-30

因此,根据日期本身,您已经指定了11月30日-1。

现在剩下的时间偏移大约为9分21秒。这是因为与1911年3月10日当地时间发生的巴黎/法国UTC相比,时钟发生了变化。

我稍微修改了您的代码示例,并根据需要介绍了 Europe / Paris
设置,它发挥了作用。这段代码还说明Z了您要查找的与UTC()的偏移量(以秒为单位):

$dt = new DateTime('0000-00-00 00:00:00', new DateTimeZone('Europe/Paris'));
printf("%s secs offset from UTC\n", $dt->format('r T (e) Z'));

我改变了一下日期

Fri, 10 Mar 1911 23:51:38 +0009 PMT (Europe/Paris) 561 secs offset from UTC
                                                   ^^^

一秒钟后:

Fri, 10 Mar 1911 23:51:39 +0000 WET (Europe/Paris) 0 secs offset from UTC

当当地标准时间即将到达1911年3月11日星期六时,将00:01:00时钟倒转到1911年3月10日(星期五)当地时间23:51:39。



 类似资料:
  • 我有一个包含日期的数据库表 有没有什么方法可以在不改变表结构的情况下获得?

  • 问题内容: 字段定义 二传手 有谁知道如何将“零日期”转换为适当的值?因为我有错误: 即使我像这样设置“默认”字段和设置器: 我仍然会有同样的问题。 问题答案: 在这里,我将大胆猜测您正在使用MySQL :-)它使用“零日期”作为特殊占位符 -不幸的是,JDBC默认情况下无法处理它们。 解决方案是将“ zeroDateTimeBehavior = convertToNull”指定为MySQL连接的

  • 问题内容: 字段定义 二传手 有谁知道如何将“零日期”转换为适当的值?因为我有错误: 即使我像这样设置“默认”字段和设置器: 我仍然会有同样的问题。 问题答案: 在这里,我将做出一个疯狂的猜测,即您正在使用MySQL :-)它使用“零日期”作为特殊的占位符 -不幸的是,默认情况下JDBC无法处理它们。 解决方案是将“ zeroDateTimeBehavior = convertToNull”指定为

  • 我想在MySQL中允许零日期。我已将更改为。 我已经在中更改了它。 然而,当我尝试插入数据时,我得到了错误, 数据截断:不正确的datetime值:“0000-00-00 00:00:00” MySQL版本为5.7.18。 这方面的任何想法都将大有帮助。

  • 问题内容: 我有一个包含日期的数据库表 我正在使用MySQL。有时从程序中将没有日期的数据传递到数据库。因此, 当使用带错误的日期列调用表数据时,日期值会自动分配给它 在插入数据时,我尝试将null值传递给日期,但是将其分配给当前时间。 有什么办法可以在不更改表结构的情况下获得? 问题答案: 您可以在数据源配置中直接使用此JDBC URL: jdbc:mysql://您的服务器:3306 /您的数

  • 问题内容: 如何将字段的默认值设置为“ 0000-00-00 00:00:00”?如果我们不能使用“ 0000-00-00 00:00:00”作为默认值?什么是 基本 有效tiemdate? 例如,这是用于创建我的商品表的SQL, 运行此查询时出现此错误, 问题答案: 错误原因:SQL模式 您可以设置的默认值,或场特殊的“零”作为虚拟日期“0000-00-00”值,如果SQL模式允许它。对于低于5