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

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