我在php中有一个日期字段,它使用以下代码:
$date = mysql_real_escape_string($_POST['intake_date']);
如何将这个日期转换为 MySql 格式 0000-00-00 以便在数据库中使用。是这样吗:date('Y-m-d' strtotime($date));。我问这个问题的原因是,我尝试了这种变化,但似乎无法使它起作用。会显示为 1970 年或其他一些变体。非常感谢。
$date = mysql_real_escape_string($_POST['intake_date']);
1. 如果你的 MySQL 列是 DATE
类型:
$date = date('Y-m-d', strtotime(str_replace('-', '/', $date)));
2. 如果您的MySQL列是DATETIME
类型:
$date = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date)));
你不必使用 strtotime()
,因为它无法处理破折号 -
分隔符,它会尝试进行减法操作。
更新,由于你的日期格式化方式,不能使用 strtotime()
,请改用以下代码:
$date = '02/07/2009 00:07:00';
$date = preg_replace('#(\d{2})/(\d{2})/(\d{4})\s(.*)#', '$3-$2-$1 $4', $date);
echo $date;
输出:
2009-07-02 00:07:00
strtotime()
函数。我更新了我的答案。请检查更新部分的代码。 - ShefDD/MM/YYYY
,应该改成MM/DD/YYYY
才能与strtotime()
一起使用。上面的preg_replace()
将把日期格式化为我展示的输出样式。也许你发送回了错误的变量,因为我刚刚仔细检查了一下,它正在响应你想要的日期格式化方式。 - Shef这个网站提供了两种相当简单的解决方案——只需检查代码,我提供了描述以防您需要,可以省去一些点击。
http://www.richardlord.net/blog/dates-in-php-and-mysql
1.一个常见的解决方案是将日期存储在 DATETIME 字段中,并使用 PHP 的 date() 和 strtotime() 函数在 PHP 时间戳和 MySQL DATETIME 之间进行转换。方法如下所示 -
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
$phpdate = strtotime( $mysqldate );
2.我们的第二个选择是让MySQL来完成工作。MySQL有一些我们可以使用的函数,在我们访问数据库时将数据转换为所需格式。UNIX_TIMESTAMP可以将DATETIME转换为PHP时间戳,而FROM_UNIXTIME则可以将PHP时间戳转换为DATETIME。这些方法在SQL查询中使用。因此,我们可以使用以下查询来插入和更新日期 -
$query = "UPDATE table SET
datetimefield = FROM_UNIXTIME($phpdate)
WHERE...";
$query = "SELECT UNIX_TIMESTAMP(datetimefield)
FROM table WHERE...";
如果您的日期格式为dd/mm/yyyy,请使用以下格式:
$date = explode('/', $_POST['posted_date']);
$new_date = $date[2].'-'.$date[1].'-'.$date[0];
$new_date = $date[2].'-'.$date[0].'-'.$date[1];
FROM_UNIXTIME()
和UNIX_TIMESTAMP()
。
在SQL中使用它们,例如:mysql> SELECT UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
| 1311343579 |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT FROM_UNIXTIME(1311343579);
+---------------------------+
| FROM_UNIXTIME(1311343579) |
+---------------------------+
| 2011-07-22 15:06:19 |
+---------------------------+
1 row in set (0.00 sec)
date()
和 strtotime()
函数。$mysqlDate = date('Y-m-d H:i:s', strtotime($_POST['intake_date']));
然而,这只有在日期格式被strtotime()
函数接受的情况下才有效。请参考文档页面以查看支持的格式。
PHP 5.3有函数可以根据您指定的任何格式创建和重新格式化DateTime对象:
$mysql_date = "2012-01-02"; // date in Y-m-d format as MySQL stores it
$date_obj = date_create_from_format('Y-m-d',$mysql_date);
$date = date_format($date_obj, 'm/d/Y');
echo $date;
输出:
01/02/2012
MySQL还可以通过在插入/更新时使用STR_TO_DATE()
函数和在查询时使用DATE_FORMAT()
来控制格式。
$php_date = "01/02/2012";
$update_query = "UPDATE `appointments` SET `start_time` = STR_TO_DATE('" . $php_date . "', '%m/%d/%Y')";
$query = "SELECT DATE_FORMAT(`start_time`,'%m/%d/%Y') AS `start_time` FROM `appointments`";
function my_date_parse($date)
{
if (!preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $date, $m))
return false;
$day = $m[1];
$month = $m[2];
$year = $m[3];
if (!checkdate($month, $day, $year))
return false;
return "$year-$month-$day";
}
$date = explode($_POST['intake_date'], '/');
mysql_date = $date[2].'-'$date[1].'-'$date[0];
虽然如果您有有效的日期,date('y-m-d', strtotime($date)); 也应该可以工作
$_POST['intake_date']
目前的格式是什么?我猜 MySQL 的列类型是DATE
,可以确认吗? - Bojangles