2016-08-31 6 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" 
] 

당신이 볼 수 있듯이,이 7 월 월 회, 월 회 12 월 두 번과 10 월 두 번, 두 번 반환합니다.

사실 저는 이전 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 함수가 윤년 또는 31 번째를 처리하지 않을 것을 두려워합니다.

답변

1

그것은 해키,하지만 난 무슨 달성하기 위해이 관리와 후 :

[ 
    "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" 
] 

내가 사랑이에 대한 간단한 해결책, 그래서 주시기 바랍니다 것입니다 :

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

이 결과 나 한테 있으면 알아. 모든 기능은 오버 헤드의 무리입니다.

+0

자바 스크립트는 장면 뒤에서 날짜를 계산하는 데 사용되며, 거기에 한 달 추가하면 JavaScript가 사용됩니다. 이것이 좋은지 나쁜지 여부는 유스 케이스 IMO에 달려 있습니다. 월 번호를 변경하는 단점 (및 초과/부족한 연도)은 몇 개월이 끝나는 날의 여러 날이 다른 달의 마지막 날과 매핑된다는 것입니다. 2017-01-28에서 2017-01-31부터 2017-02-28. 다른 방법은 더 복잡합니다. 2 월 28 일을 1 월/3 월 28 일 또는 31 일로 매핑해야합니까? 아니면 중간에 뭔가? – CoDEmanX

+0

내 생각에 분명히 혼란 스럽습니다. 나는 한달의 공제가 지난달에보고되기를 원합니다. 같은 달이나 한 달을 건너 뛰는 것이 아닙니다. 아주 드물게 "오늘 날짜, 지난 달"에 일어난 일에 신경 쓰지 만 매월 데이터를 집계하는 데 크게 신경을 썼습니다. 내 위의 솔루션 작동하지만 정말 그것을 달성하는 신뢰할 수있는 데이터베이스 기능을 갖고 싶습니다. –