我尝试打印我应用的用户生日,数据库中允许日期。
在数据库中,用户#37的生日为'1900-01-01'。

用户模型定义生日,访问者和属性,如下所示:

/**
 * @ORM\Column(type="date")
 */
 protected $fechaDeNacimiento;

/**
 * @param \DateTime $fechaDeNacimiento
 * @return User
 */
 public function setFechaDeNacimiento($fechaDeNacimiento)
 {
   $this->fechaDeNacimiento = $fechaDeNacimiento;

   return $this;
 }

 /**
  * @return \DateTime
  */
  public function getFechaDeNacimiento()
  {
    return $this->fechaDeNacimiento;
  }


用树枝,我写:

{{ user.fechaDeNacimiento | date("m-d-Y")}}


但是结果不是“ 01-01-1900”,而是“ 12-31-1899”。格式正确,但日期不正确。

有任何想法吗 ?。

最佳答案

飞跃秒

这是由于leap second


  second秒是一秒钟的调整,偶尔会应用
  协调世界时(UTC),以保持其一天中的时间
  接近平均太阳时间。
  
  具体来说,在秒之间插入一个正leap秒
  所选UTC日历日期的23:59:59(一个月的最后一天,
  通常是6月30日或12月31日)和以下的第二个00:00:00
  日期。


实际上,在12-31-1899中发生了leap秒,称为here



编辑

大多数数据库都支持“时区飞跃秒”,例如MySQL

为了让您有个想法,这是2008-12-31中定义的the秒发生的情况

That's a perfect example in 2008

mysql> CREATE TABLE t1 (
    ->   a INT,
    ->   ts TIMESTAMP DEFAULT NOW(),
    ->   PRIMARY KEY (ts)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> -- change to UTC
mysql> SET time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> -- Simulate NOW() = '2008-12-31 23:59:59'
mysql> SET timestamp = 1230767999;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t1 (a) VALUES (1);
Query OK, 1 row affected (0.00 sec)

mysql> -- Simulate NOW() = '2008-12-31 23:59:60'
mysql> SET timestamp = 1230768000;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t1 (a) VALUES (2);
Query OK, 1 row affected (0.00 sec)

mysql> -- values differ internally but display the same
mysql> SELECT a, ts, UNIX_TIMESTAMP(ts) FROM t1;
+------+---------------------+--------------------+
| a    | ts                  | UNIX_TIMESTAMP(ts) |
+------+---------------------+--------------------+
|    1 | 2008-12-31 23:59:59 |         1230767999 |
|    2 | 2008-12-31 23:59:59 |         1230768000 |
+------+---------------------+--------------------+
2 rows in set (0.00 sec)

mysql> -- only the non-leap value matches
mysql> SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:59';
+------+---------------------+
| a    | ts                  |
+------+---------------------+
|    1 | 2008-12-31 23:59:59 |
+------+---------------------+
1 row in set (0.00 sec)

关于mysql - 打印日期不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21084505/

10-09 08:32
查看更多