如何使用php在日期类型列中仅插入年份

如何使用php在日期类型列中仅插入年份,php,date,cakephp,Php,Date,Cakephp,我正在创建一个编辑表单,其中的选项是生日年份,因为我只想更改年份,而不是日期和月份。在我的数据库中,列类型为date。我无法更改年份,但它存储的默认值为0000-00-00 下面是我使用的代码 <?php $years = array(); $end = date('Y') - 101; $start = date('Y'); $yearUser = date('Y',strtotime($userData['User']['birthday']));

我正在创建一个编辑表单,其中的选项是生日年份,因为我只想更改年份,而不是日期和月份。在我的数据库中,列类型为date。我无法更改年份,但它存储的默认值为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',
    ));
?>


感谢您提供的一些提示,我们将不胜感激。

不,您不能在日期列中只保存年份

MySQL手册中说可以存储部分日期

为此,您需要将列的数据类型更改为Varchar(4),然后您就可以轻松地做到这一点


否则,您必须保存完整的日期,然后您只能在MYSQL中按功能获取年份数据。如果您无法更改数据库中的列类型,则必须使用Y-m-d将用户输入转换为ISO日期格式,这样,您可以将完整日期存储在数据库中,然后在选择数据库中的记录时,只需从该列中提取年份部分:

从用户输入将其存储在数据库中

$yearUser = date('Y-m-d',strtotime($userData['User']['birthday']));
请注意,PHP将自动输入当前月份和日期值。今天的ie是:9-18,加上用户选择的年份,比如1983年,也就是:
1983-09-18

仅检索存储的年份值:

$yearUser = date('Y',Model->birthday));

如果确实可以更改数据库上的数据类型,那么只需将其存储为整数即可,因为在这种情况下,date()函数已返回整数。

日期字段始终是完整日期。您必须指定完整日期

显然,您可以使用以下格式格式化日期字段的输出:

SELECT DATE_FORMAT(yourfield,"%Y-%m");
根据上面的描述,您可以使用


尝试使用int字段而不是date,或者char(4)只需使用适当的数据类型而不是繁琐的解决方法:那么就不需要其他修改了。谢谢。。我使用strotime函数获取年份,然后使用两种类型的输入隐藏和选择来获取值。
INSERT INTO tablename (yourfield) VALUE ('YEAR: Auto CURDATE()', CURDATE() )";