如何将字符串值转换为日期

时间:2016-08-24 16:17:34

标签: php mysql

我目前正在处理一个表单,其中管理员从3个下拉菜单中选择日期 并标明员工在场或缺席。

我的考勤表包含以下栏目:

  • emp_id:int
  • 日期:日期
  • status:varchar

我在html表单中有3个下拉菜单,分别用于YYYY,MM和DD选择。我想将这些值作为日期捕获并将其插入表中的日期列。我怎样才能做到这一点?我试过在互联网上搜索功能 但我无法有效地使用其中任何一个。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

由于日期将插入MySQL,所有这些格式与sprintf()strtotime()完全没有必要。

MySQL期望以下格式的date and time literals为日期数据类型:

  

•作为YYYY-MM-DD' YYYY-MM-DD中的字符串或者' YY-MM-DD'格式。一个“放松”   允许使用语法:任何标点符号都可以用作   日期部分之间的分隔符。例如,' 2012-12-31' 2012/12/31',   ' 2012 ^ 12 ^ 31'和' 2012 @ 12 @ 31'是等价的。

     

•作为一个字符串,在“YYYYMMDD'”中没有分隔符。或者' YYMMDD'   格式,只要字符串作为日期有意义。例如,   ' 20070523'和' 070523'被解释为' 2007-05-23',但' 071332'   是非法的(它有无意义的月和日部分)并成为   ' 0000-00-00&#39 ;.

     

•作为YYYYMMDD或YYMMDD格式的数字,前提是   数字作为约会是有道理的。例如,19830905和830905是   解释为' 1983-09-05'。

使用php中的表单输入中的简单字符串连接生成MySQL接受的格式之一,然后将此数据用作insert sql语句中的参数。

答案 1 :(得分:1)

您是否真的搜索了可能的解决方案?其中有很多:DateTimeDateTime::createFromFormat,或者如果您希望保持程序化:date_createdate_create_from_format将分别执行相同的操作:

$date = new DateTime(
    sprintf('%s/%s/%s', $year, $month, $day)
);
echo $date->format('U');//get unix timestamp

阅读DateTime manual及相关网页了解详情。

如果你所追求的只是时间戳,正如Cam建议strtotime可能是你最好的选择:

$timestamp = strtotime(
    sprintf('%s/%s/%s', $year, $month, $day)
);

根据字段类型,您要么需要时间戳,要么需要一些格式化的字符串,在这种情况下,$date->format('Y-m-d H:i:s')有或没有H:i:s位是最可能的候选者