当用户首次创建帐户时,默认情况下会将当前时间戳放在时间戳类型的"日期"字段中。
如果字段类型为"日期时间",则不允许我将默认值设置为当前日期时间。我只能用"时间戳"来做到这一点。
但是现在我需要使用 date_diff() 它需要日期时间格式。有没有办法将时间戳结果转换为日期时间,以便我可以将其放入date_diff?
我可以手动返回创建新帐户的每个页面,并使其找到当前日期,然后将其放入日期时间字段中,但这显然会有更多的工作(如有必要,我会这样做)。
实际上没有任何代码可以显示。这是我从数据库中获取值的地方(函数发送查询"从 user_login WHERE 用户名 = $username 中选择日期"):
$udate = get_value("user_login", "date", "username", $_SESSION['user']['username']);
返回的值是日期和时间,但不采用日期时间格式。因此,当我尝试以下操作时:
date_diff($udate, date(Ymd), true);
它给出了错误
date_diff() 期望参数 1 为日期时间,给定字符串
如果字段类型为"日期时间",则不允许我将默认值设置为当前日期时间。我只能用"时间戳"来做到这一点。
MySQL将允许您指定默认值为NOW()
的DATETIME
字段。这将由MySQL转换为CURRENT_TIMESTAMP
。
然后,当创建用户时,MySQL会自动将CURRENT_TIMESTAMP
插入date
字段中。
MySQL 日期和时间函数 NOW()
编辑:
看起来您的问题与date_diff
本身有关。您必须提供前两个参数作为类型 DateTime
,但 MySQL 数据库中的时间戳表示形式是string
。创建一个 DateTime 对象并将其作为参数传递:
$udate = new DateTime(get_value("user_login", "date", "username", $_SESSION['user']['username']));
$now = new DateTime();
$diff = date_diff($udate, $now, true);
// Will spit out difference in days
echo $diff->format('%d days');