数据库JavaScript日期过滤器

数据库JavaScript日期过滤器,javascript,date,filter,rethinkdb,Javascript,Date,Filter,Rethinkdb,我只想查询不到一天的东西。。。在JS中,返回true;为什么“反思”没有返回正确的结果,也没有返回任何结果 r.db( "db" ).table("table") .filter( function (item) { var now = new Date(), then = new Date( item.upload_date ); return now - then > 1000*60*60*24 }); 我也试过这个: r.db

我只想查询不到一天的东西。。。在JS中,返回true;为什么“反思”没有返回正确的结果,也没有返回任何结果

r.db( "db" ).table("table")
  .filter( function (item) {
    var
        now = new Date(),
        then = new Date( item.upload_date );
    return now - then > 1000*60*60*24
  });
我也试过这个:

r.db( "db" ).table("table")
  .filter( function (item) {
    var
        now = new Date(),
        then = new Date( item( "upload_date") );
    return now - then > 1000*60*60*24
  });

编辑:肯定是我的
项目(“上载日期”)
没有返回日期字符串。。。我应该用什么来代替呢?

我想你误解了ReQL。过滤器功能应该在服务器上运行,而不是在客户端上运行

您必须将其更改为:

r.db( "db" ).table("table")
  .filter(r.now().sub(r.row('upload_date')).lt(60*60*24))
r.now()
返回当前时间,假设
upload\u date
存储在本机数据库时间中,您可以细分两个时间值,结果是经过多少秒。然后你可以比较60*60*24(一天有多少秒)

以函数样式编写,它将是

r.db( "db" ).table("table")
  .filter(function(item) {
     return r.now().sub(item('upload_date')).lt(60*60*24))
  })
它可能会混淆它的编写方式看起来像原始JavaScript。但事实并非如此。事实上,客户机驱动程序将对客户机上的函数求值,以将查询构建成一个JSON字符串,并将其发送到服务器。它不会在客户端上运行以执行比较逻辑。它生成一个JSON字符串,以使用上提供的API告诉RejectDB它想要什么。有关驱动程序工作方式的更多信息:

其次,如果您
upload\u date
不在本机RejectionDB时间对象中,您可以尝试将其转换为RejectionDB时间类型,以便使用以下一些函数轻松操作:

  • iso8601时间:
  • 时间:

或者试着在这里发布您的时间,我们会帮您解决问题。

ReQL足够聪明,可以解析字符串并对其进行排序。如果您的日期格式正确,则仍应使用行上的
.lt
进行过滤

r.db("database").table("table")
    .filter( r.row('upload_date')
    .lt( new Date( new Date() - (24*60*60*1000) ).toISOString().replace(/\..{4}/, '').replace(/T/, ' ') ) )
--
干杯

--编辑-- (学习或测试请使用Regex101.com)
String.replace()方法中请求的正则表达式:

FIRST-(转储时间代码的末尾)

例如:“2017-03-20T17:17:37.966Z”->“2017-03-20T17:17:37”

  • 查找第一个文字句点<代码>\。
  • ->以及该
    {4}
  • 将上述分组替换为空引号,或不替换

    -

    例如:“2017-03-20T17:17:37”->“2017-03-20 17:17:37”

    • 查找字符的第一个实例
      T
    将上面的组替换为空格字符或“”

    这会将字符串设置为能够在Reinspect db内进行比较


    注意:RejectDB作为一个项目已被删除,但将是开源的。如果你需要支持,考虑你的项目的其他资源。我试图避免改写我的脚本来使用EngChyTimes,但是我认为作为一个好的实践,我应该这样做,写得很好,但是我已经读过所有这些了,当然是在一个服务器中运行它,在一个在亚马逊的EC2实例中管理的DoCKER容器中…但是谢谢。。。。也正是因为我很好奇,但很确定我试过你的解决方案,我的直觉是正确的。。。这是字符串数据,需要强制转换为日期,这会在某个地方破坏某些东西,然后神奇地“噗”一声不起作用。是的……这里的问题是数据类型。您必须修复并转换它。但是你写的方式让我觉得你误解了ReQL
    item.upload\u date
    是访问字段的无效语法,
    item(“upload\u date”)
    是如何编写的。我也发现了这一点。。。注意我的第二个例子