在()期间使用RethinkDB检索过去7天

时间:2017-11-01 18:50:10

标签: php rethinkdb

我已经尝试了几个小时,尝试使用RethinkDB和PHP在过去7天内返回所有结果。

https://www.rethinkdb.com/docs/dates-and-times/javascript/调查文档我发现最合适的RethinkDB函数是during()

下面是我的代码,我已经意识到这个任务比它看起来要困难得多。我曾尝试将PHP中的DateTime直接用于during,但这也没有成功。

$sevenago = new DateTime('7 days ago');
$sevenago->setTimeZone(new DateTimeZone('Asia/Kolkata'));
$sevenago = date_format($sevenago, 'U');
$now = new DateTime();
$now->setTimeZone(new DateTimeZone('Asia/Kolkata'));
$now = date_format($now, 'U');

$ordersLastWeek = r\table("orders")->filter(function($doc) {
    return $doc('status')->eq('shipped')
    ->rAnd($doc('time')->during(r\epochTime($sevenago), r\epochTime($now)));
})->run($conn);

time字段存储如下(标准RethinkDB DateTime类型):

{"$reql_type$":"TIME","epoch_time":1509557927.661,"timezone":"+00:00"}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

试试这个:

$ordersLastWeek = r\table("orders")->filter(function($doc) use ($sevenago, $now) {
    return $doc('status')->eq('shipped')->rAnd($doc('time')->during(r\epochTime($sevenago), r\epochTime($now)));
})->run($conn);

在您的代码中,您忘记使用use ($sevenago, $now)作为过滤功能。

答案 1 :(得分:0)

$ordersLastWeek = r\table("orders")->filter(function($doc) {
    return $doc('status')->eq('shipped')
    ->rAnd(($doc('time') > r\epoch_time($sevenago)));
})->run($conn);

你试过这个吗?希望它有效。