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

Odoo 16网站模块日期格式修改求助(mm-dd-yyyy转dd-mm-yyyy)

解决Odoo 16网站模块中日期格式修改无效的问题

问题根源

你当前使用的是原生HTML <input type="date"> 控件,这类控件的日期格式由浏览器默认控制,Odoo的t-options配置对原生date输入不生效。另外,Odoo网站模块的前端交互依赖自身Web组件库,直接操作原生控件会和Odoo内部逻辑冲突。

解决方案步骤

1. 替换原生日期控件为Odoo Web DatePicker组件

修改XML代码,使用Odoo内置的日期选择器组件,它会遵循自定义的dateFormat配置:

<tr>
    <td><label class="col-form-label" for="checkIn">Check-in Date</label></td>
    <td>
        <div class="o_datepicker">
            <input id="request_checkIn" type="text" name="checkIn" 
                t-att-data-date-format="'dd-mm-yyyy'" 
                class="form-control o_datepicker_input"/>
        </div>
        <input id="request_checkInTime" type="time" class="form-control"/>
    </td>
    <td><label class="col-form-label" for="checkOut">Check-out Date</label></td>
    <td>
        <div class="o_datepicker">
            <input id="request_checkOut" type="text" name="checkOut" 
                t-att-data-date-format="'dd-mm-yyyy'" 
                class="form-control o_datepicker_input"/>
        </div>
        <input id="request_checkOutTime" type="time" class="form-control"/>
    </td>
</tr>

2. 调整JavaScript脚本适配Odoo组件

Odoo的DatePicker基于jQuery UI实现,需要用对应方式初始化和操作,修改JS代码如下:

document.addEventListener('DOMContentLoaded', function() {
    // 初始化Odoo日期选择器
    const initDatePickers = () => {
        const dateInputs = document.querySelectorAll('.o_datepicker_input');
        dateInputs.forEach(input => {
            const dateFormat = input.dataset.dateFormat;
            $(input).datepicker({
                dateFormat: dateFormat,
                minDate: 0, // 限制最小日期为今天
                onSelect: function(selectedDate) {
                    if (this.id === 'request_checkIn') {
                        // 更新退房日期的最小限制
                        $('#request_checkOut').datepicker('option', 'minDate', selectedDate);
                    }
                }
            });
        });
    };

    // 初始化日期选择器
    initDatePickers();

    // 获取时间输入控件
    const request_checkInTime = document.getElementById('request_checkInTime');
    const request_checkOutTime = document.getElementById('request_checkOutTime');

    // 退房时间验证
    request_checkOutTime.addEventListener('input', function() {
        const checkInDate = $('#request_checkIn').datepicker('getDate');
        const checkOutDate = $('#request_checkOut').datepicker('getDate');
        
        // 日期相同时验证时间
        if (checkInDate && checkOutDate && checkInDate.getTime() === checkOutDate.getTime()) {
            if (this.value <= request_checkInTime.value) {
                alert('退房时间必须晚于入住时间');
                this.value = request_checkInTime.value;
            }
        }
    });
});

3. 确保依赖加载(可选)

如果页面未自动加载jQuery UI相关资源,在XML中添加依赖:

<template id="assets_frontend" inherit_id="website.assets_frontend">
    <xpath expr="." position="inside">
        <script type="text/javascript" src="/web/static/lib/jquery_ui/ui/datepicker.js"/>
        <link rel="stylesheet" href="/web/static/lib/jquery_ui/themes/base/datepicker.css"/>
    </xpath>
</template>

关键说明

  • 原生<input type="date">的value始终为ISO格式(YYYY-MM-DD),无法通过前端配置修改显示格式,必须使用Odoo DatePicker组件才能自定义显示样式。
  • Odoo DatePicker基于jQuery UI,需用jQuery方法处理控件的取值、赋值和配置修改,不能直接用原生DOM操作。

内容的提问来源于stack exchange,提问作者Fahrina Rashid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:37:55