使用php在mysql表中保存时间戳

gau*_*kum 89 php mysql database sql-insert

我在MySQL表中有一个具有timestamp数据类型的字段.我将数据保存到该表中.但是当我将timestamp(1299762201428)传递给记录时,它会自动将值保存0000-00-00 00:00:00到该表中.

如何将时间戳存储在MySQL表中?

这是我的INSERT发言:

INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
       (2,5,9,'2',1299762201428,5,10,20,'1')
Run Code Online (Sandbox Code Playgroud)

jim*_*imy 155

像这样通过

date('Y-m-d H:i:s','1299762201428')
Run Code Online (Sandbox Code Playgroud)

  • 但是你在db中得到的值显示列类型是`datetime`,如果你想将它改为`timestamp`然后将列类型改为`varchar(15)` (7认同)
  • 那么timestamp数据类型的用途是什么?s_time字段具有timestamp数据类型.我不能将1299762201428保存到该字段中吗? (4认同)
  • 然后把它放在INT字段上.无论如何,时间戳只是日期的表示,反之亦然.您可以使用jimy告诉您的函数从时间戳转换为日期,以及使用`strtotime`的另一种方式.编辑:顺便说一下,时间戳只涵盖所有可能日期的范围(1970-01-01至xx-xx-2032我认为) (2认同)

Ric*_*uin 49

嘿那里,使用这个FROM_UNIXTIME()功能.

像这样:

INSERT INTO table_name
(id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES
(1,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1'), 
(2,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1')
Run Code Online (Sandbox Code Playgroud)

  • 类型安全:`FROM_UNIXTIME`产生本机mysql日期类型,而php的`date()`返回一个字符串. (5认同)
  • 它更好,因为Web服务器(PHP)和MySQL可能在不同的地方.因此,date('Ymd H:i:s','1299762201428')将设置Web服务器的TimeZone.将不同的Web服务器放置在不同的区域中,您将拥有不一致的数据.或者,在您的代码中,您必须强制应用程序时区到MySQL的时区.[date_timezone_set](http://php.net/manual/en/function.date-timezone-set.php) (4认同)

小智 19

$created_date = date("Y-m-d H:i:s");
$sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')";
$result = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)


You*_*nse 15

有些事情需要澄清:

  • MySQL时间戳字段类型不存储unix时间戳,而是存储datetime-kind值.
  • UNIX时间戳是常规int类型的数字.
  • 您所谈论的时间戳不是常规的unix时间戳,而是具有毫秒的时间戳.

因此,正确的答案是

$timestamp = '1299762201428';
$date = date('Y-m-d H:i:s', substr($timestamp, 0, -3));
Run Code Online (Sandbox Code Playgroud)


Mas*_*ref 5

now()您也可以在查询中使用,即:

insert into table (time) values(now());
Run Code Online (Sandbox Code Playgroud)

它将使用当前时间戳。