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

时间:2015-09-18 03:40:51

标签: php date cakephp

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

感谢您提供一些提示,我们将非常感谢

3 个答案:

答案 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()函数已经返回一个整数。