odoo 中utc filter 時差的問題

當嘗試在記錄中設置“今天”,“明天”,“本週”,“今年”等類似過濾器時,建議的方式將設置如下域:(
“今天”域,其他類似)

<filter string="Today" domain="[('start_datetime','&lt;=', time.strftime('%%Y-%%m-%%d 23:59:59')),('start_datetime','&gt;=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"/>

這些都是錯誤的,它們出現在許多官方和非官方的附件中。第一個將utc時間(‘start_datetime’)與服務器時間進行比較,第二個將utc時間與客戶端時間進行比較。(不確定,第一個也可能是客戶端時間?py.js進行了解析)

正確做法,

<filter string="Today" domain="[('start_at', '&gt;=', 
      datetime.datetime.combine(context_today(), datetime.time(0,0,0)))]" />

這樣做的目的是避免strftime()完全使用,而直接在域中使用DateTime值,因此將其正確序列化並使用正確的時區信息發送到服務器。

現在這樣寫就可以了

 <filter name="filter_time_today" date="time" string="比對時間" default_period="today"/>

參考:https://github.com/odoo/odoo/issues/6469

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章