Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

[已解决] OpenERP 6.1.1部分版本(6.1) 日期类的数据存在时区问题.



  • @jsohua:官方对这个bug已经有方案 [检测到链接无效,已移除]
    -------------------------------------------------------------------------------------
    6.1.1 部分版本(现6.1源码已解决本问题) 在日期字段上, 存在时区问题. 表现为
    1  缺省时间 为GMT时间, 而非本地时间.
    2  修改日期字段后, 字段时间变为GMT时间,而非本地时间.

    群里 武汉-lion(343181024)  提出解决方案

    1  文件addons\web\static\src\js\dates.js

    openerp.web.str_to_datetime 方法 中, 修改

    <br />&nbsp; &nbsp; ....<br />&nbsp; &nbsp; var obj = Date.parseExact(res[1] + &quot; UTC&quot;, &#039;yyyy-MM-dd HH:mm:ss zzz&#039;);<br />&nbsp; &nbsp; ....<br />
    



    <br />&nbsp; &nbsp; ....<br />&nbsp; &nbsp; var obj = Date.parseExact(res[1], &#039;yyyy-MM-dd HH:mm:ss&#039;);<br />&nbsp; &nbsp; ....<br />
    




    2 文件 addons\web\static\src\js\dates.js

    openerp.web.datetime_to_str 方法 修改

    <br />&nbsp; &nbsp; ....<br />&nbsp; &nbsp; return zpad(obj.getUTCFullYear(),4) + &quot;-&quot; + zpad(obj.getUTCMonth() + 1,2) + &quot;-&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;  + zpad(obj.getUTCDate(),2) + &quot; &quot; + zpad(obj.getUTCHours(),2) + &quot;:&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;  + zpad(obj.getUTCMinutes(),2) + &quot;:&quot; + zpad(obj.getUTCSeconds(),2);<br />&nbsp; &nbsp; ....<br />
    





    <br />&nbsp; &nbsp; ....<br />&nbsp; &nbsp; return zpad(obj.getFullYear(),4) + &quot;-&quot; + zpad(obj.getMonth() + 1,2) + &quot;-&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;  + zpad(obj.getDate(),2) + &quot; &quot; + zpad(obj.getHours(),2) + &quot;:&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;  + zpad(obj.getMinutes(),2) + &quot;:&quot; + zpad(obj.getSeconds(),2);<br />&nbsp; &nbsp; ....<br />
    




    重启 OE server 后, 清空浏览器缓存后生效.

    另: 低于某个版本的 addons\web\ 上述修改也是不生效的.具体哪个版本以后, 需要再确认. 如果你使用今天最新的 addons\web\ 肯定是OK的. 😃


    特此感谢 武汉-lion(343181024)  以及 杭州-猴哥(605620619)
    大家鼓掌....

    ==============================



  • 非常感谢楼主和武汉-lion,及大家的帮助。


  • 管理员

    新版本代码变化了

    <br />&nbsp; &nbsp; return new Date(<br />&nbsp; &nbsp; &nbsp; &nbsp; parseInt(res[1], 10),<br />&nbsp; &nbsp; &nbsp; &nbsp; parseInt(res[2], 10) - 1,<br />&nbsp; &nbsp; &nbsp; &nbsp; parseInt(res[3], 10),<br />&nbsp; &nbsp; &nbsp; &nbsp; parseInt(res[4], 10),<br />&nbsp; &nbsp; &nbsp; &nbsp; parseInt(res[5], 10),<br />&nbsp; &nbsp; &nbsp; &nbsp; parseInt(res[6], 10)<br />&nbsp; &nbsp; );<br />
    


  • @Joshua 
    这样改的结果是 返回一个 日期串, 变成返回一个 Date 对象了. 确认测试通过了吗?


  • 管理员

    @mrshelly
    我测试过了,
    现在源码就是这样写的
    return new Date(Date.UTC(       
            parseInt(res[1], 10),
            parseInt(res[2], 10) - 1,
            parseInt(res[3], 10),
    我i只是把其中的UTC去掉,别的修改还是和你的一样,我测试后感觉也没什么问题。



  • @Joshua 能把代码贴全吗?

    我看原源代码为

    <br />....<br />openerp.web.datetime_to_str = function(obj) {<br />&nbsp; &nbsp; if (!obj) {<br />&nbsp; &nbsp; &nbsp; &nbsp; return false;<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; return zpad(obj.getUTCFullYear(),4) + &quot;-&quot; + zpad(obj.getUTCMonth() + 1,2) + &quot;-&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;  + zpad(obj.getUTCDate(),2) + &quot; &quot; + zpad(obj.getUTCHours(),2) + &quot;:&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp;  + zpad(obj.getUTCMinutes(),2) + &quot;:&quot; + zpad(obj.getUTCSeconds(),2);<br />};<br />....<br />
    



    如果按你的 return 改的话, 肯定会报 res undefined 错误的....

    你修改的是 str_to_datetime 吧?
    不是 datetime_to_str...


  • 管理员

    对 。上面那个是 str_to_datetime,下面是datetime_to_str。分两部分的



  • 哦. 可能是我理解错了..

    就是使用 new Date 来替代 Date.parseExact 了...


  • 管理员

    官方提供了解决方法:<br / https://bugs.launchpad.net/openobject-server/+bug/1038017 br />补丁如下,大家试试
    补丁:
    [attachimg=1]
    撤销补丁:
    [attachimg=2]


Log in to reply