2016-08-31 38 views
0

在AQL中使用DATE_SUBTRACT函数时,在处理月份附近的日期时,Arango似乎减去30天而不是返回上个月的实际月份。例如: -ArangoDB日期数学 - 月差

for mo in 0..11 
    let month = date_subtract(date_now(),count,"month") 
    return month 

回报

[ 
    "2016-08-31T20:30:24.440Z", 
    "2016-07-31T20:30:24.441Z", 
    "2016-07-01T20:30:24.441Z", 
    "2016-05-31T20:30:24.441Z", 
    "2016-05-01T20:30:24.441Z", 
    "2016-03-31T20:30:24.441Z", 
    "2016-03-02T20:30:24.441Z", 
    "2016-01-31T20:30:24.441Z", 
    "2015-12-31T20:30:24.441Z", 
    "2015-12-01T20:30:24.441Z", 
    "2015-10-31T20:30:24.441Z", 
    "2015-10-01T20:30:24.441Z" 
] 

正如你所看到的,这个月返回两次,两次五月,三月两次,两次月,和十月两次。

我其实只需要前12个月。我想要的列表是:

[ 
    "2016-08-01T00:00:00.000Z", 
    "2016-07-01T00:00:00.000Z", 
    "2016-06-01T00:00:00.000Z", 
    "2016-05-01T00:00:00.000Z", 
    "2016-04-01T00:00:00.000Z", 
    "2016-03-01T00:00:00.000Z", 
    "2016-02-01T00:00:00.000Z", 
    "2016-01-01T00:00:00.000Z", 
    "2015-12-01T00:00:00.000Z", 
    "2015-11-01T00:00:00.000Z", 
    "2015-10-01T00:00:00.000Z", 
    "2015-09-01T00:00:00.000Z" 
] 

如何在AQL中确保我总能得到上个月的实际数据,而不是过去的30天?我担心date_subtract函数不会处理闰年或31st。

回答

1

这是哈克,但我设法完成我是在与这样的:

for mo in 0..11 
    return date_subtract(concat(left(date_iso8601(date_now()),7),'-01T00:00:00.000Z'), mo, "month") 

结果造成:

[ 
    "2016-08-01T00:00:00.000Z", 
    "2016-07-01T00:00:00.000Z", 
    "2016-06-01T00:00:00.000Z", 
    "2016-05-01T00:00:00.000Z", 
    "2016-04-01T00:00:00.000Z", 
    "2016-03-01T00:00:00.000Z", 
    "2016-02-01T00:00:00.000Z", 
    "2016-01-01T00:00:00.000Z", 
    "2015-12-01T00:00:00.000Z", 
    "2015-11-01T00:00:00.000Z", 
    "2015-10-01T00:00:00.000Z", 
    "2015-09-01T00:00:00.000Z" 
] 

我会一个简单的解决方案,这一点,所以请让我知道是否有一个。所有这些功能都是一堆开销。

+0

JavaScript是用来计算幕后的日期,如果你在那里增加一个月,那么一天会改变。这是好还是坏取决于用例IMO。仅改变月份编号(和上/下溢年)的缺点是,在几个月末的多天会映射到另一个月份的最后一天,例如, 2017-01-28至2017-01-31至2017-02-28。相反,这更复杂 - 应该在2月28日映射到1月/ 3月28日还是31日?或者介于两者之间? – CoDEmanX

+0

这是非常令人困惑的 - 我的目的,我绝对想减去一个月报告前一个月,而不是在同一个月或跳过一个月。我很少关心“今天的日期,上个月”发生了什么,但我非常关心每月汇总数据。我的上述解决方案的工作原理,但我真的想有一个可靠的数据库内的功能,实现这一点。 –