2017-01-30 29 views
0
比較日期的正確方法

什麼是比較日期範圍以正確的方式,用減號來,如果日期比外生比較更大?什麼是外生

def has_valid_date_range(query) do 
    from ct in query, 
     where: (ct.end_date - from_now(0, "day")) > 0, 
     where: (ct.end_date - from_now(0, "day")) <= ct.due_notice 
    end 

此查詢將返回所有行今天END_DATE減去是今天比0日期和結束日期減去更大的結果比due_notice

低,但它返回我一個錯誤

** (Ecto.Query.CompileError) ct.end_date() - from_now(0, "day") is not a valid query expression.

+0

您究竟想要在這裏計算什麼?就我所知,'from_now'只適用於Ecto DSL中的比較運算符。你可能在尋找'datetime_add'。 – Dogbert

+0

我正在閱讀文檔,但沒有看到'from_now'與'-'功能的比較。可能你是對的。有沒有其他的方法來構建這個查詢? –

+0

這裏'due_notice'的類型是什麼?你想要計算什麼? – Dogbert

回答

2

正如我們在評論部分想通了,你想選擇其end_date是當前時間之後和在從當前時間due_notice天的記錄。爲此,您可以使用此查詢:

where: ct.end_date > from_now(0, "day") and 
     ct.end_date <= datetime_add(ct.end_date, ct.due_notice, "day")