PHP中的日期到年龄Diff()错误

时间:2017-11-28 18:40:13

标签: php datetime

我在将日期从datetimepicker转换为用户年龄时遇到两个错误。

这是我的datetimepicker,它产生的值为mm / dd / yyyy:

// $dob = new DateTime('datetimepicker');
$dob = date('m-d-Y', 'datetimepicker');
$now = new DateTime();
$age = $dob->diff($now);
$agv = $age->format('%Y');

和处理用户输入的PHP是:

<input type="text" value="'my-translation-key' | translate" />

$ agv应该等于用户年龄。

现在,如果我按原样使用它,我会收到错误:

警告:date()要求参数2为整数,字符串为

如果我用注释中的语句替换了第一行,则错误出现在diff()中:

致命错误:未捕获异常:DateTime :: __ construct():无法解析位置0(d)处的时间字符串(datetimepicker):在数据库中找不到时区。

很抱歉我的编码错误,但我真的不明白这部分是如何工作的。在转换为AJAX之前它工作正常。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

如评论中所述,您不能将DateTime()与日期字符串(或unix时间戳)混合使用。此外,您需要引用datepicker中的实际提交值,而不仅仅是其名称。

$dob = new DateTime($_POST['datetimepicker']);
$now = new DateTime();
$age = $dob->diff($now);
$agv = $age->format('%Y');

<强> Demo

$_POST['datetimepicker'] = '12/31/2018'; // stub this for our example

$dob = new DateTime($_POST['datetimepicker']);
$now = new DateTime();
$age = $dob->diff($now);
$agv = $age->format('%Y');

echo $agv; // 01

答案 1 :(得分:0)

在使用date()函数之前,您需要从字符串转换为时间(来自EPOCH的秒的整数值),这是一个示例:

<form id="myform" name="myform" method="POST" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
    <label>Birthdate</label>
    <input type="date" name="dob" required>
    <input type="submit" name="form_submit"/>
</form>

<?php
if(isset($_POST['dob'])){
    $dob = date('m-d-Y', strtotime($_POST['dob']));
}

http://php.net/manual/en/function.strtotime.php

或者,您可以转换为DateTime对象,如下所示:

if(isset($_POST['dob'])){
    $dob = DateTime::createFromFormat('Y-m-d', $_POST['dob']);
    echo $dob->format('m-d-Y');
}

http://php.net/manual/en/refs.calendar.php