You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15网站/门户datetime picker格式切换及绕过系统限制咨询

Odoo 15 中将 Datetime Picker 改为 24 小时制的实现方案

基础修改方法

在 Odoo 15 中可以将 datetime picker 从 12 小时制切换为 24 小时制,常见实现方式有两种:

  • 通过系统语言区域配置
    确保字段使用默认的 datetime widget,然后在 Odoo 后台进入「设置」-「用户与公司」-「用户」,修改目标用户的「语言」为支持 24 小时制的区域(如中文简体 zh_CN、英式英语 en_GB),系统会自动适配对应时间格式。

  • 前端自定义强制修改
    如果需要无视系统语言强制统一为 24 小时制,可以通过自定义模块的 JavaScript 代码重写 datetime picker 的格式:

    odoo.define('custom_module.custom_datetime_picker', function(require) {
        'use strict';
        var DateTimePicker = require('web.DateTimePicker');
        
        DateTimePicker.include({
            init: function(parent, options) {
                this._super(parent, options);
                // 自定义24小时制格式,可根据需求调整日期部分
                this.format = 'YYYY-MM-DD HH:mm';
            },
        });
        return DateTimePicker;
    });
    

    将上述代码放入自定义模块的 static/src/js/ 目录下,并在模块的 __manifest__.py 中引入该 JS 文件。


针对 datetime-local 类型字段的绕过方案

原生 HTML5 的 datetime-local 控件格式确实由浏览器/操作系统的区域设置决定,无法直接通过 Odoo 配置修改,但可以通过以下方式绕过限制:

  • 替换为 Odoo 原生 datetime widget
    在模型的字段定义中,将 widget='datetime-local' 修改为 widget='datetime',这样就能使用 Odoo 自带的时间选择器,不受系统设置影响,再按照前面的方法配置 24 小时制即可。

  • 自定义控件替换原生 datetime-local
    如果必须保留 datetime-local 字段类型,可以通过 JS 代码隐藏原生控件,替换为自定义的 24 小时制时间选择器:

    odoo.define('custom_module.replace_datetime_local', function(require) {
        'use strict';
        var fieldRegistry = require('web.field_registry');
        var FieldDatetimeLocal = fieldRegistry.get('datetime-local');
        
        FieldDatetimeLocal.include({
            start: function() {
                this._super.apply(this, arguments);
                // 隐藏原生控件
                const $nativeInput = this.$el.find('input[type="datetime-local"]');
                $nativeInput.hide();
                
                // 初始化自定义24小时制选择器(示例使用Odoo内置组件)
                var DateTimePicker = require('web.DateTimePicker');
                var picker = new DateTimePicker(this, {
                    format: 'YYYY-MM-DD HH:mm',
                    value: this.value,
                });
                picker.appendTo(this.$el);
                
                // 同步选择器值到原生字段
                picker.on('datetime_changed', this, function(event) {
                    $nativeInput.val(event.date.toISOString().slice(0, 16));
                    this._setValue(event.date);
                });
            },
        });
        return FieldDatetimeLocal;
    });
    

内容的提问来源于stack exchange,提问作者Bilal Shehab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:35:10