我很难理解如何在SQL中操作日期的格式。我创建了一个列,并将类型设置为date
。默认格式似乎是yyyy-mm-dd
。我更喜欢Jan 1, 2015
这样的格式。最好将实际数据存储在SQL中,并以看似标准的yyyy-mm-dd
格式进行转换吗?
在我的情况下,我想创建选择(下拉)html表单是基于我的SQL日期数据。但是我希望日期以Jan 1, 2015
格式显示。因此,似乎我需要将SQL数据转换为我想要的格式,然后在提交回SQL时,我需要将其重新转换为标准格式。对于后一部分,下面的代码似乎可以工作。但是,我如何完成前面的任务,采取yyyy-mm-dd
,并将其转换为我喜欢的格式?
$myinput='Jan 1, 2015';
$sqldate=date('Y-m-d',strtotime($myinput));
echo $sqldate;
您可以使用DATE_FORMAT()将日期值转换为您想要的格式。至于你的情况:
SELECT DATE_FORMAT(`your_col_name`,'%b %d, %Y') AS `your_col_name` FROM `tbl_name`
另一方面,您可以使用STR_TO_DATE()来存储不同格式的将日期输入数据库。例如,如果您想将Jan 1, 2015
存储到数据库中,而不将其转换为mysql默认格式,那么您可以使用:
UPDATE `tbl_name` SET `date_col_name` =STR_TO_DATE($date_str,`%b %d, %Y`) WHERE {CONDITION}
但是MySQL中较少的操作适合更快的查询
对于在PHP中处理日期/时间信息,最好的方法是使用Unix时间戳作为交换格式。您可以通过UNIX_TIMESTAMP()函数实现这一点。在PHP中,然后使用date()或gmdate()来格式化所需的时间。最后,当将时间戳存储回MySQL时,使用FROM__UNIXTIME()。
发出查询:
SELECT UNIX_TIMESTAMP(`datetime_column`) AS `unixtime` FROM `table`;
在PHP中,你可以按照你喜欢的方式格式化它:
$unixtime = $row['unixtime']; // $row is the row fetched from database
echo gmdate('Y-m-d', $unixtime);
然后可以操作时间:
$unixtime += 86400; // add one day
最后,将其存储回MySQL:
UPDATE `table` SET `datetime_column` = FROM_UNIXTIME($unixtime) WHERE …
(您可能使用预处理语句或其他方法来防止SQL注入)
额外提示:如果你不知道时区,时间戳或任何日期/时间都是无用的。所以最好的方法是将日期/时间存储在UTC中,然后将其转换为您喜欢的时区。