【发布时间】:2017-03-30 07:07:30
【问题描述】:
在CakePHP 3 Cookbook on Date/Time 中,您可以使用 IsWithinNext/WasWithinNext 将时间间隔与未来/过去几天/几周进行比较。您还可以通过执行 ->modify('extra time') 来修改日期/时间 - 例如。如果 $date = 2016-01-01,$date->modify('+1 week') 将意味着 $date = 2016-01-08。
这些功能需要使用 Cake\i18n\Time。但是,当我尝试使用这些功能时,我收到了 Cake 错误:
在字符串上调用成员函数 isWithinNext()。
这是我使用的代码:
$date_start = \Cake\Database\Type::build('date')->marshal($data['session']['date_start'])->i18nFormat(); //before hand my dates were in the form of an array comprised of Year, Month and Day. This changes them into date format.
if($date_start->isWithinNext('1 week')){
$deposit_due = $booking->date_confirm;
$deposit_due->modify('+48 hours');
} elseif ($date_start->isWithinNext('2 weeks')){
$deposit_due = $booking->date_confirm;
$deposit_due->modify('+1 week');
} elseif ($date_start->isWithinNext('3 weeks')){
$deposit_due = $booking->date_confirm;
$deposit_due->modify('+1 week');
} else {
$deposit_due = $booking->date_confirm;
$deposit_due->modify('+2 weeks');
}
【问题讨论】:
-
错误信息非常简单,
$date_start是一个字符串,而不是一个对象。仔细查看您的代码,您在构造的日期对象上调用i18nFormat()。 -
哦,没有意识到
i18nFormat()使其可打印将其变成了字符串。谢谢。 -
谢谢@burzum。这是一个非常有用的参考。
-
顺便说一句@ndm,
date('Y-m-d H:i:s', Time::now()->getTimestamp());已经是日期对象了吗?我尝试在设置为该变量的变量上使用\Cake\Database\Type::build('date')->marshal(),但我得到了字符串错误,而最初是数组并被转换的变量没有问题。
标签: date cakephp time cakephp-3.0