我在将日期从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之前它工作正常。你能帮忙吗?
答案 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');
}