diff --git a/setup/web_datetime_picker_default_time/odoo/addons/web_datetime_picker_default_time b/setup/web_datetime_picker_default_time/odoo/addons/web_datetime_picker_default_time
new file mode 120000
index 000000000..0306220d0
--- /dev/null
+++ b/setup/web_datetime_picker_default_time/odoo/addons/web_datetime_picker_default_time
@@ -0,0 +1 @@
+../../../../web_datetime_picker_default_time
\ No newline at end of file
diff --git a/setup/web_datetime_picker_default_time/setup.py b/setup/web_datetime_picker_default_time/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/web_datetime_picker_default_time/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
diff --git a/web_datetime_picker_default_time/README.rst b/web_datetime_picker_default_time/README.rst
new file mode 100644
index 000000000..ac0fe1a53
--- /dev/null
+++ b/web_datetime_picker_default_time/README.rst
@@ -0,0 +1,108 @@
+================================
+Web Datetime Picker Default Time
+================================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:876c728e4efe7028ccfa4c129a7fd0be521b76bbc7dc2add21ff0d3a7f903860
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
+ :target: https://github.com/OCA/web/tree/16.0/web_datetime_picker_default_time
+ :alt: OCA/web
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_datetime_picker_default_time
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module customizes the datetime picker widget and allows to define a
+default time to be applied in case the user selects only a Date.
+
+For example, if a user wants to define a commitment date without having
+to specify the time on that date, setting the default time value on the
+field in the Form view allows to ensure the commitment date will be set
+to this time instead of the time when the page was loaded by the
+browser.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+You can define the default time as follows :
+
+.. code-block:: xml
+
+.. raw:: html
+
+
+
+Known issues / Roadmap
+======================
+
+- Handle Timezone related to the default time
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Camptocamp
+
+Contributors
+------------
+
+- Akim Juillerat akim.juillerat@camptocamp.com
+- Iván Todorovich ivan.todorovich@camptocamp.com
+
+Maintainers
+-----------
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-grindtildeath| image:: https://github.com/grindtildeath.png?size=40px
+ :target: https://github.com/grindtildeath
+ :alt: grindtildeath
+
+Current `maintainer `__:
+
+|maintainer-grindtildeath|
+
+This module is part of the `OCA/web `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_datetime_picker_default_time/__init__.py b/web_datetime_picker_default_time/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/web_datetime_picker_default_time/__manifest__.py b/web_datetime_picker_default_time/__manifest__.py
new file mode 100644
index 000000000..fab4d6e85
--- /dev/null
+++ b/web_datetime_picker_default_time/__manifest__.py
@@ -0,0 +1,20 @@
+# Copyright 2024 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+{
+ "name": "Web Datetime Picker Default Time",
+ "summary": "Allows to define a default time on datetime picker",
+ "version": "16.0.1.0.0",
+ "category": "web",
+ "website": "https://github.com/OCA/web",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "maintainers": ["grindtildeath"],
+ "license": "AGPL-3",
+ "depends": [
+ "web",
+ ],
+ "assets": {
+ "web.assets_backend": [
+ "/web_datetime_picker_default_time/static/src/js/datepicker.esm.js",
+ ],
+ },
+}
diff --git a/web_datetime_picker_default_time/readme/CONTRIBUTORS.md b/web_datetime_picker_default_time/readme/CONTRIBUTORS.md
new file mode 100644
index 000000000..6168e901d
--- /dev/null
+++ b/web_datetime_picker_default_time/readme/CONTRIBUTORS.md
@@ -0,0 +1,2 @@
+* Akim Juillerat
+* Iván Todorovich
diff --git a/web_datetime_picker_default_time/readme/DESCRIPTION.md b/web_datetime_picker_default_time/readme/DESCRIPTION.md
new file mode 100644
index 000000000..4e15c7e13
--- /dev/null
+++ b/web_datetime_picker_default_time/readme/DESCRIPTION.md
@@ -0,0 +1,7 @@
+This module customizes the datetime picker widget and allows to define a default
+time to be applied in case the user selects only a Date.
+
+For example, if a user wants to define a commitment date without having to specify
+the time on that date, setting the default time value on the field in the Form view
+allows to ensure the commitment date will be set to this time instead of the time
+when the page was loaded by the browser.
diff --git a/web_datetime_picker_default_time/readme/ROADMAP.md b/web_datetime_picker_default_time/readme/ROADMAP.md
new file mode 100644
index 000000000..53bc26362
--- /dev/null
+++ b/web_datetime_picker_default_time/readme/ROADMAP.md
@@ -0,0 +1 @@
+* Handle Timezone related to the default time
diff --git a/web_datetime_picker_default_time/readme/USAGE.md b/web_datetime_picker_default_time/readme/USAGE.md
new file mode 100644
index 000000000..3e66343a5
--- /dev/null
+++ b/web_datetime_picker_default_time/readme/USAGE.md
@@ -0,0 +1,5 @@
+You can define the default time as follows :
+
+.. code-block:: xml
+
+
diff --git a/web_datetime_picker_default_time/static/src/js/datepicker.esm.js b/web_datetime_picker_default_time/static/src/js/datepicker.esm.js
new file mode 100644
index 000000000..c23e7280c
--- /dev/null
+++ b/web_datetime_picker_default_time/static/src/js/datepicker.esm.js
@@ -0,0 +1,36 @@
+/** @odoo-module **/
+/* Copyright 2024 Camptocamp
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) */
+
+import {DatePicker, DateTimePicker} from "@web/core/datepicker/datepicker";
+import {patch} from "@web/core/utils/patch";
+
+patch(DateTimePicker.prototype, "DateTimePickerDefaultTime", {
+ onMounted() {
+ this._super.apply(this, arguments);
+ this.addPickerListener("change", ({date, oldDate}) => {
+ const default_time = this.props.defaultTime;
+ if (date && !oldDate && default_time) {
+ // FIXME: Consider TZ
+ date.set({
+ hour: default_time.hour,
+ minute: default_time.minute,
+ second: default_time.second,
+ });
+ window.$(this.rootRef.el).datetimepicker("date", date);
+ }
+ });
+ },
+});
+
+DateTimePicker.props = _.extend({}, DatePicker.props, {
+ defaultTime: {
+ type: Object,
+ shape: {
+ hour: Number,
+ minute: Number,
+ second: Number,
+ },
+ optional: true,
+ },
+});