在MySQL中插入datetime时的PHP date()格式

Ale*_*lex 300 php mysql

date()如果我想将结果插入MySQL datetime类型列,那么在PHP中传递给函数的正确格式是什么?

我一直在尝试,date("Y-M-D G:i:s")但每次只插入"0000-00-00 00:00:00".

Mar*_*iot 641

问题是你正在使用'M''D',这是一个文本表示,MySQL期望格式的数字表示2010-02-06 19:30:13

尝试:date("Y-m-d H:i:s")使用数字等价物.

编辑:切换GH,虽然可能没有影响,但您可能希望使用带有前导0的24小时格式.

  • 只想到一个可爱的助记符来记住格式:"**Y**我们的**********不是**他的**".在很多层面上工作:) (54认同)
  • 为什么不是我不知道的情况.我必须每次都提到堆栈溢出.单.运行.时间. (29认同)
  • 这必须是任何人都需要的最常见的日期时间格式之一.应该是内置的php全局或日期函数本身的一部分(例如,'c','r') (25认同)
  • 来这里比在我的代码中搜索这样的用法更快. (8认同)
  • 应该有一个php速记,因为ISO 8601和RFC 2822都有 (2认同)

Tim*_*tle 103

从php的date()手册页的评论:

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
Run Code Online (Sandbox Code Playgroud)

你的'Y'是正确的 - 这是一整年,但'M'是一个三个月的月份,而'm'是两个月的月份.与'D'而不是'd'相同的问题.'G'是1或2位小时,其中'H'在需要时始终具有前导0.

  • +1获取最广泛的说明和手动链接:) (2认同)
  • 是的,我现在工作很多,所以这是我最喜欢的消遣:) 这将再次改变。 (2认同)

JAL*_*JAL 40

这是一个替代解决方案:如果您将PHP中的日期作为时间戳,则绕过使用PHP处理它并让DB负责使用该FROM_UNIXTIME函数对其进行转换.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
Run Code Online (Sandbox Code Playgroud)

  • @trejder,谁告诉你在mysql中这样做比在php中做得快?在PHP中执行它更好,因为数据库通常是瓶颈,你想尽快进出**. (2认同)
  • @mopsyd,数据库是瓶颈,因为[水平扩展](https://en.wikipedia.org/wiki/Shard_(database_architecture))需要复杂性.将其与可在全球范围内复制而无需更改任何代码的Web服务器进行比较. (2认同)

小智 26

我使用以下PHP代码创建一个插入MySQL DATETIME列的变量.

$datetime = date_create()->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

这将保留服务器的当前日期和时间.


小智 11

$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可能会回答这个问题,但提供有关_why_和/或_how_的其他背景信息可以回答这个问题,从而显着提高其长期价值.请[编辑]你的答案添加一些解释,并修复格式问题. (2认同)

Ahm*_*ber 9

格式化MySQL DATETIME列的时间戳:

strftime('%Y-%m-%d %H:%M:%S',$timestamp);
Run Code Online (Sandbox Code Playgroud)


小智 8

使用PHP格式化MySQL datetime

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
Run Code Online (Sandbox Code Playgroud)


San*_*ues 8

我用这个函数(PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}
Run Code Online (Sandbox Code Playgroud)

旧版本的PHP(PHP <7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*dam 6

如果不使用时间戳,则不需要使用PHP中的date()方法.如果dateposted是datetime列,您可以像这样插入当前日期:

$db->query("INSERT INTO table (dateposted) VALUES (now())");
Run Code Online (Sandbox Code Playgroud)

  • 感谢分享这种方法.这是迄今为止我见过的最简单的方法. (2认同)

Nin*_*pac 5

在 PHP7+ 中使用DateTime类:

function getMysqlDatetimeFromDate(int $day, int $month, int $year): string
{
 $dt = new DateTime();
 $dt->setDate($year, $month, $day);
 $dt->setTime(0, 0, 0, 0); // set time to midnight

 return $dt->format('Y-m-d H:i:s');
}
Run Code Online (Sandbox Code Playgroud)