我正在创建一个编辑表单,其中我的选项是生日年份,因为我只想更改年份而不是日期和月份。在我的数据库中,列类型是日期。我无法更改年份,但它存储的是默认值,即0000-00-00。
以下是我使用的代码。
<?php
$years = array();
$end = date('Y') - 101;
$start = date('Y');
$yearUser = date('Y',strtotime($userData['User']['birthday']));
$counter = 0;
$selectedYear=0;
for($i=$start;$i>$end;$i--){
if($yearUser == $i)
{
$selectedYear = $counter;
}
$counter++;
array_push($years,$i);
}
echo $this->Form->select('birthday',array(
'options' => $years,
'selected' => $selectedYear
));
echo $this->Form->input('birthday',array(
'type' => 'hidden',
'id' => 'birthYear',
'class' =>'user-profile-location',
));
?>
感谢您提供一些提示,我们将非常感谢
答案 0 :(得分:3)
不,您只能在日期栏中保存年份
它在MySQL手册中说你可以存储部分日期
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
为此您需要将列的数据类型更改为 Varchar(4),然后您可以轻松地执行此操作...
否则你必须保存完整的日期然后你只能在MYSQL中获得YEAR()函数年份
答案 1 :(得分:2)
DATE
字段始终是完整日期。你必须指定一个完整的日期。
显然,您可以格式化DATE字段的输出:
SELECT DATE_FORMAT(yourfield,"%Y-%m");
根据此web的说明,您可以使用。
INSERT INTO tablename (yourfield) VALUE ('YEAR: Auto CURDATE()', CURDATE() )";
答案 2 :(得分:1)
如果您无法在数据库中更改列类型,则必须使用Ymd将用户输入转换为ISO日期格式,这样您就可以将完整日期存储在数据库中,然后您只需要提取年份在数据库中选择记录时从该列开始的部分:
从用户输入存储数据库
$yearUser = date('Y-m-d',strtotime($userData['User']['birthday']));
请注意,PHP会自动输入当前的月和日值。即今天是:9-18,加上用户选择的年份,比如1983,那将是:1983-09-18
仅检索存储年度值:
$yearUser = date('Y',Model->birthday));
如果你可以更改数据库上的数据类型,那么只需将其存储为整数,因为在这种情况下,date()函数已经返回一个整数。