我有一个有varchar类型的数据库列的有效日期,全部是d/m/y格式.然后,当我尝试将其转换为带有strtotime函数和日期格式化的日期格式时,我得到01/01/70.我甚至试图用纯字符串值替换数据库结果.我搜索并发现此链接 PHP strtotime返回1970日期,当日期 列为 空PHP:strtotime()总是返回01/01/1970 strtotime()在以dd/mm/yyyy格式指定日期时不返回正确的值 但两者都由于数据不为空且格式有效,因此无效.这是我的代码片段
if(isset($item['prep_date']) && $item['prep_date'] != NULL){
$trial=$item['prep_date'];
echo ": ".$trial;
$prepDate= strtotime($trial);
$prepDate = date('d/m/y', $prepDate);
echo "= ".$prepDate;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?这是两个回声的结果
28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 03/01/13= 01/03/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 18/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 02/09/13= 09/02/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 05/11/13= 11/05/13: 28/10/13= 01/01/70: 28/11/13= 01/01/70: 05/11/13= 11/05/13: 28/10/13= 01/01/70: 28/10/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 05/11/13= 11/05/13: 11/12/13= 12/11/13: 11/12/13= 12/11/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 11/12/13= 12/11/13: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 28/11/13= 01/01/70: 30/01/14= 01/01/70
Run Code Online (Sandbox Code Playgroud)
你得到1970年的价值,因为你的strtotime()回报false:
var_dump( strtotime('28/11/13') ); # false
Run Code Online (Sandbox Code Playgroud)
查看支持的日期和时间格式.strtotime这是美国的月,日和年(mm/dd/yyyy),就像它在这里说的那样.
如果输入格式是dd/mm/yyyy最简单的方法是使用DateTime::createFromFormat或strtotime打开str_replace('/', '.', 'dd/mm/yyyy');使其成为欧洲日期格式dd.mm.yyyy.