我遇到了一些麻烦,似乎无法找到任何可靠的答案。希望有人可以提供帮助。
我有一个获取所选日期的HTML5输入表单
<input type="date" name="launch_date" />
这会打开日期选择器,并以dd / mm / yy
输入日期我试图将其保存到SQL数据库中,使用表中的DATE类型。所以首先我创建所有表单输入的变量
$launch_date = $_POST['launch_date'];
然后我尝试将字符串转换为正确的时间戳,以便在数据库中接受它。
然后,所有变量都作为SQL INSERT / UPDATE查询的一部分添加到正确的列中。
$launch_date = strtotime($launch_date);
每当我查看数据库时,它总是显示发布的代码,就像它期待YYYY-MM-DD格式一样。
如何获取前端输入的日期为DD-MM-YYYY,但正确存储在数据库中为YYYY-MM-DD?
更新
好的,所以我想我试图让它变得太复杂。通过使用HTML5日期输入,并将该输入直接保存到数据库中的DATA类型列,将其保存为YYY-MM-DD。似乎工作正常。
当我回显这些值时,它将输出例如2014-09-24。我怎样才能让它在24-09-2014展示?
<?php echo $row['start_date'];?>
答案 0 :(得分:0)
您可以在JQuery日期选择器中进行修改。
$( "#launch_date" ).datepicker({
dateFormat : 'yy-mm-dd'
});
此功能将提供MySQL日期时间格式。
答案 1 :(得分:0)
我认为你的问题是strtotime()。 让我们用这个代替那一行:
list($day,$mon,$year) = explode('/', $launch_date);
$launch_date = "$year-$mon-$day";
答案 2 :(得分:0)
根据我的经验,很多问题归结为服务器上的语言环境设置。
PHP可能会将dd / mm / yyyy识别为mm / dd / yyyy并且如果日期部分无效则可以使用。要使PHP正确验证日期为dd / mm / yyyy,请交换/ for - (dd-mm-yyyy)
$launch_date = $_POST['launch_date'];
$launch_date = str_replace("/", "-", $launch_date);
$launch_date = strtotime($launch_date);
这只是一个快速的黑客,看看是否是这种情况。如果没有,那么我建议至少在路上放入var_dumps来检查日期是否正确格式化。
另一种方法是使用date_create_from_format(http://php.net/manual/en/datetime.createfromformat.php)解析日期以及要解析的格式。
$launch_date = date_create_from_format('d/m/Y', $launch_date );
我认为Windows PHP上没有实现...所以如果你有麻烦,这是一个功能实现
if (!function_exists('date_parse_from_format')) {
function date_parse_from_format($format, $date) {
$returnArray = array('hour' => 0, 'minute' => 0, 'second' => 0,
'month' => 0, 'day' => 0, 'year' => 0);
$dateArray = array();
// array of valid date codes with keys for the return array as the values
$validDateTimeCode = array('Y' => 'year', 'y' => 'year',
'm' => 'month', 'n' => 'month',
'd' => 'day', 'j' => 'day',
'H' => 'hour', 'G' => 'hour',
'i' => 'minute', 's' => 'second');
/* create an array of valid keys for the return array
* in the order that they appear in $format
*/
for ($i = 0; $i <= strlen($format) - 1; $i++) {
$char = substr($format, $i, 1);
if (array_key_exists($char, $validDateTimeCode)) {
$dateArray[$validDateTimeCode[$char]] = '';
}
}
// create array of reg ex things for each date part
$regExArray = array('.' => '\.', // escape the period
// parse d first so we dont mangle the reg ex
// day
'd' => '(\d{2})',
// year
'Y' => '(\d{4})',
'y' => '(\d{2})',
// month
'm' => '(\d{2})',
'n' => '(\d{1,2})',
// day
'j' => '(\d{1,2})',
// hour
'H' => '(\d{2})',
'G' => '(\d{1,2})',
// minutes
'i' => '(\d{2})',
// seconds
's' => '(\d{2})');
// create a full reg ex string to parse the date with
$regEx = str_replace(array_keys($regExArray), array_values($regExArray), $format);
// Parse the date
preg_match("#$regEx#", $date, $matches);
// some checks...
if (!is_array($matches) ||
$matches[0] != $date ||
sizeof($dateArray) != (sizeof($matches) - 1)) {
return $returnArray;
}
// an iterator for the $matches array
$i = 1;
foreach ($dateArray AS $key => $value) {
$dateArray[$key] = $matches[$i++];
if (array_key_exists($key, $returnArray)) {
$returnArray[$key] = $dateArray[$key];
}
}
return $returnArray;
}
}
编辑:以防万一错过了......确保你在进入数据库时将其转换为YYYY-MM-DD:
// Whatever you do to parse date into timestamp
$launch_date_db = date("Y-m-d H:i:s", $launch_date)
<强>更新强>
PHP喜欢时间戳...所以请继续:
$launch_date = strtotime($row['start_date']); // convert it into timestamp
echo date('d-m-Y', $launch_date); // format timestamp
答案 3 :(得分:0)
它对我有用。请注意,stringToTime()
返回Unix时间戳(即自1970年1月1日00:00:00 UTC以来的秒数),这可能不是您的数据库所期望的。
请注意,表示值可能因浏览器和用户的区域设置而异,但提交的实际值应为"A valid full-date as defined in [RFC 3339]"
这是一个小小的演示:
<?php
$launch_date = $_POST['launch_date'];
echo '$launch_date = \''.$launch_date.'\' <br />';
$launch_date = strtotime($launch_date);
echo 'strtotime($launch_date) = \''.$launch_date.'\' '; //a unix timestamp eg '1410480000'
?>
<form method="post">
<input type="date" name="launch_date" />
<input type="submit"/>
</form>
http://runnable.com/VCLkST-wq9cPvwJT/stackoverflow-com-questions-26020544-for-php
<强>更新强>
进一步更改问题。您可以使用PHP's DateTime::format格式化日期,如下所示:
<?php echo date_format($row['start_date'], 'd-m-Y');?>
答案 4 :(得分:0)
使用SQL设置正确的格式:
.... VALUES (STR_TO_DATE('24-09-2014', '%d-%m-%Y'))
取回它
SELECT DATE_FORMAT(datefield, '%d-%m-%Y') FROM ......