时间戳数据类型不能采用或存储这种日期格式“2013 年 1 月 17 日星期四上午 11:47:49”,但这是我想存储在数据库中的格式,因为客户喜欢这种格式。我可以使用 varchar 或 text 存储它,但这些数据类型不允许我使用 TIMESTAMPDIFF 函数进行几分钟的计算。请提供任何帮助:
4 回答
如果您只想要该格式,请将字段的数据类型更改为 VARCHAR,但最好将其存储为 DATETIME/TIMESTAMP,然后在显示时您可以使用 php 的 DATE 格式以您想要的方式显示它。
您应该按原样存储 timastamp 值 - TIMESTAMP 格式。
使用DATE_FORMAT函数来格式化值,例如 -
SELECT DATE_FORMAT(column1, '%W %M %Y') FROM table1;
存储的格式是真实的,您要显示的格式必须从那里计算。
这是一个小示例:http ://www.plus2net.com/php_tutorial/php_date_time.php
您描述的存储问题可以通过使用 unix 时间戳 (INT)、ISO8601 (2013-01-17T19:47:49Z) 或 DATETIME(确保配置所有 UTC)而不是不运行就难以解码的长字符串来解决进入时区和 DST 问题。
只有在界面中显示日期或时间戳时,才转换为您想要的任何时区和格式。如果唯一的界面是浏览器,只需使用 javascript 的 Date 对象转换为本地时间(以您喜欢的任何格式)。
MySQL 查询示例:
SELECT UNIX_TIMESTAMP(`datetime_stsuff`) FROM `whatever` LIMIT 1
或者
SELECT `int_unixtimestamp_seconds` FROM `whatever` LIMIT 1
Javascript 示例:
var objDateFromDatabase=new Date(<?php echo json_encode($nUnixTimestampFromDB);?>*1000);
或者
//note that older browsers don't support the Z suffix ("Zulu time" (GMT or UTC)) so use +00:00 instead (2012-01-01T12:34:56+00:00).
var objDateFromDatabase=new Date(<?php echo json_encode($strISO8601TimestampFromDB);?>*1000);
请参阅MDN 日期对象文档,了解您可以使用哪些方法来格式化您的客户所需。不包含关键字 UTC 的方法返回值已经转换为浏览器的时区(操作系统配置的时区),因此您不必费心向用户询问他们的时区。