• 版块
  • 标签
  • 热门
  • 用户
  • 群组
Skins
  • Light
  • Default
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Quartz
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Slate
  • Solar
  • Superhero
  • Vapor
Collapse

Odoo 中文社区

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

已定时 已固定 已锁定 已移动 Odoo 新手求助
10 帖子 3 发布者 7447 浏览
    • 从旧到新
    • 从新到旧
    • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • mrshellyM 离线
    mrshellyM 离线
    mrshelly
    写于 最后由 编辑
    #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)
    大家鼓掌....

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

    1 条回复 最后回复
    0
  • 绿 离线
    绿 离线
    绿叶两片
    写于 最后由 编辑
    #2

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

    1 条回复 最后回复
    0
  • JoshuaJ 离线
    JoshuaJ 离线
    Joshua 管理员
    写于 最后由 编辑
    #3

    新版本代码变化了

    <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 AT openerp.cn),欢迎关注公众号:openerp_cn

    1 条回复 最后回复
    0
  • mrshellyM 离线
    mrshellyM 离线
    mrshelly
    写于 最后由 编辑
    #4

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

    1 条回复 最后回复
    0
  • JoshuaJ 离线
    JoshuaJ 离线
    Joshua 管理员
    写于 最后由 编辑
    #5

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

    【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

    1 条回复 最后回复
    0
  • mrshellyM 离线
    mrshellyM 离线
    mrshelly
    写于 最后由 编辑
    #6

    @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...

    1 条回复 最后回复
    0
  • JoshuaJ 离线
    JoshuaJ 离线
    Joshua 管理员
    写于 最后由 编辑
    #7

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

    【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

    1 条回复 最后回复
    0
  • mrshellyM 离线
    mrshellyM 离线
    mrshelly
    写于 最后由 编辑
    #8

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

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

    1 条回复 最后回复
    0
  • JoshuaJ 离线
    JoshuaJ 离线
    Joshua 管理员
    写于 最后由 编辑
    #9

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

    【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

    1 条回复 最后回复
    0

  • 登录

  • 没有帐号? 注册

  • Login or register to search.
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
  • 登录

  • 没有帐号? 注册

  • Login or register to search.