blob: 7be9d188072c3bef2b1e7da868ead91d4a6181b3 [file] [log] [blame]
Dixsie Wolmers739e4592020-06-05 07:00:06 -05001<template>
2 <b-container fluid="xl">
3 <page-title />
4 <b-row>
5 <b-col md="8" xl="6">
6 <alert variant="info" class="mb-4">
7 <span>
Sandeepa Singhf67f7692021-07-19 18:04:18 +05308 {{ $t('pageDateTime.alert.message') }}
Dixsie Wolmers739e4592020-06-05 07:00:06 -05009 <b-link to="/profile-settings">
Sandeepa Singhf67f7692021-07-19 18:04:18 +053010 {{ $t('pageDateTime.alert.link') }}</b-link
Dixsie Wolmers739e4592020-06-05 07:00:06 -050011 >
12 </span>
13 </alert>
14 </b-col>
15 </b-row>
16 <page-section>
17 <b-row>
18 <b-col lg="3">
19 <dl>
Sandeepa Singhf67f7692021-07-19 18:04:18 +053020 <dt>{{ $t('pageDateTime.form.date') }}</dt>
jason westoverd36ac8a2025-11-03 20:58:59 -060021 <dd v-if="bmcTime">
22 {{ $filters.formatDate(bmcTime) }}
23 </dd>
Dixsie Wolmers739e4592020-06-05 07:00:06 -050024 <dd v-else>--</dd>
25 </dl>
26 </b-col>
27 <b-col lg="3">
28 <dl>
Sandeepa Singhf67f7692021-07-19 18:04:18 +053029 <dt>{{ $t('pageDateTime.form.time.label') }}</dt>
jason westoverd36ac8a2025-11-03 20:58:59 -060030 <dd v-if="bmcTime">
31 {{ $filters.formatTime(bmcTime) }}
32 </dd>
Dixsie Wolmers739e4592020-06-05 07:00:06 -050033 <dd v-else>--</dd>
34 </dl>
35 </b-col>
36 </b-row>
37 </page-section>
Sandeepa Singhf67f7692021-07-19 18:04:18 +053038 <page-section :section-title="$t('pageDateTime.configureSettings')">
Dixsie Wolmers739e4592020-06-05 07:00:06 -050039 <b-form novalidate @submit.prevent="submitForm">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020040 <b-form-group
41 label="Configure date and time"
42 :disabled="loading"
jason westoverd36ac8a2025-11-03 20:58:59 -060043 label-class="visually-hidden"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020044 >
Dixsie Wolmers739e4592020-06-05 07:00:06 -050045 <b-form-radio
46 v-model="form.configurationSelected"
47 value="manual"
Sandeepa Singhf67f7692021-07-19 18:04:18 +053048 data-test-id="dateTime-radio-configureManual"
Dixsie Wolmers739e4592020-06-05 07:00:06 -050049 >
Sandeepa Singhf67f7692021-07-19 18:04:18 +053050 {{ $t('pageDateTime.form.manual') }}
Dixsie Wolmers739e4592020-06-05 07:00:06 -050051 </b-form-radio>
jason westoverd36ac8a2025-11-03 20:58:59 -060052 <b-row class="mt-3 ms-3">
Dixsie Wolmers739e4592020-06-05 07:00:06 -050053 <b-col sm="6" lg="4" xl="3">
54 <b-form-group
Sandeepa Singhf67f7692021-07-19 18:04:18 +053055 :label="$t('pageDateTime.form.date')"
Dixsie Wolmers739e4592020-06-05 07:00:06 -050056 label-for="input-manual-date"
57 >
Dixsie Wolmersfcda2002020-07-29 14:18:44 -050058 <b-form-text id="date-format-help">YYYY-MM-DD</b-form-text>
Dixsie Wolmers739e4592020-06-05 07:00:06 -050059 <b-input-group>
60 <b-form-input
61 id="input-manual-date"
62 v-model="form.manual.date"
Surya Vde23ea22024-07-11 15:19:46 +053063 :state="getValidationState(v$.form.manual.date)"
Sukanya Pandey6b5ff102021-05-10 14:07:15 +053064 :disabled="ntpOptionSelected"
Sandeepa Singhf67f7692021-07-19 18:04:18 +053065 data-test-id="dateTime-input-manualDate"
Dixsie Wolmers5ea16782020-07-27 17:50:43 -050066 class="form-control-with-button"
Surya Vde23ea22024-07-11 15:19:46 +053067 @blur="v$.form.manual.date.$touch()"
Dixsie Wolmers739e4592020-06-05 07:00:06 -050068 />
69 <b-form-invalid-feedback role="alert">
Surya Venkatesan1b89e592024-09-25 11:59:49 +053070 <div v-if="v$.form.manual.date.pattern.$invalid">
Dixsie Wolmers739e4592020-06-05 07:00:06 -050071 {{ $t('global.form.invalidFormat') }}
72 </div>
Surya Venkatesan1b89e592024-09-25 11:59:49 +053073 <div v-if="v$.form.manual.date.required.$invalid">
Dixsie Wolmers739e4592020-06-05 07:00:06 -050074 {{ $t('global.form.fieldRequired') }}
75 </div>
76 </b-form-invalid-feedback>
Dixsie Wolmers739e4592020-06-05 07:00:06 -050077 </b-input-group>
78 </b-form-group>
79 </b-col>
80 <b-col sm="6" lg="4" xl="3">
81 <b-form-group
jason westoverd36ac8a2025-11-03 20:58:59 -060082 :label="
83 $t('pageDateTime.form.time.timezone', {
84 timezone,
85 })
86 "
Dixsie Wolmers739e4592020-06-05 07:00:06 -050087 label-for="input-manual-time"
88 >
Dixsie Wolmersfcda2002020-07-29 14:18:44 -050089 <b-form-text id="time-format-help">HH:MM</b-form-text>
Dixsie Wolmers739e4592020-06-05 07:00:06 -050090 <b-input-group>
91 <b-form-input
92 id="input-manual-time"
93 v-model="form.manual.time"
Surya Vde23ea22024-07-11 15:19:46 +053094 :state="getValidationState(v$.form.manual.time)"
Sukanya Pandey6b5ff102021-05-10 14:07:15 +053095 :disabled="ntpOptionSelected"
Sandeepa Singhf67f7692021-07-19 18:04:18 +053096 data-test-id="dateTime-input-manualTime"
Surya Vde23ea22024-07-11 15:19:46 +053097 @blur="v$.form.manual.time.$touch()"
Dixsie Wolmers739e4592020-06-05 07:00:06 -050098 />
99 <b-form-invalid-feedback role="alert">
Surya Venkatesan1b89e592024-09-25 11:59:49 +0530100 <div v-if="v$.form.manual.time.pattern.$invalid">
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500101 {{ $t('global.form.invalidFormat') }}
102 </div>
Surya Venkatesan1b89e592024-09-25 11:59:49 +0530103 <div v-if="v$.form.manual.time.required.$invalid">
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500104 {{ $t('global.form.fieldRequired') }}
105 </div>
106 </b-form-invalid-feedback>
107 </b-input-group>
108 </b-form-group>
109 </b-col>
110 </b-row>
111 <b-form-radio
112 v-model="form.configurationSelected"
113 value="ntp"
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530114 data-test-id="dateTime-radio-configureNTP"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500115 >
116 NTP
117 </b-form-radio>
jason westoverd36ac8a2025-11-03 20:58:59 -0600118 <b-row class="mt-3 ms-3">
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500119 <b-col sm="6" lg="4" xl="3">
120 <b-form-group
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530121 :label="$t('pageDateTime.form.ntpServers.server1')"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500122 label-for="input-ntp-1"
123 >
124 <b-input-group>
125 <b-form-input
126 id="input-ntp-1"
127 v-model="form.ntp.firstAddress"
Surya Vde23ea22024-07-11 15:19:46 +0530128 :state="getValidationState(v$.form.ntp.firstAddress)"
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530129 :disabled="manualOptionSelected"
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530130 data-test-id="dateTime-input-ntpServer1"
Surya Vde23ea22024-07-11 15:19:46 +0530131 @blur="v$.form.ntp.firstAddress.$touch()"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500132 />
133 <b-form-invalid-feedback role="alert">
Surya Venkatesan1b89e592024-09-25 11:59:49 +0530134 <div v-if="v$.form.ntp.firstAddress.required.$invalid">
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500135 {{ $t('global.form.fieldRequired') }}
136 </div>
137 </b-form-invalid-feedback>
138 </b-input-group>
139 </b-form-group>
140 </b-col>
141 <b-col sm="6" lg="4" xl="3">
142 <b-form-group
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530143 :label="$t('pageDateTime.form.ntpServers.server2')"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500144 label-for="input-ntp-2"
145 >
146 <b-input-group>
147 <b-form-input
148 id="input-ntp-2"
149 v-model="form.ntp.secondAddress"
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530150 :disabled="manualOptionSelected"
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530151 data-test-id="dateTime-input-ntpServer2"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500152 />
153 </b-input-group>
154 </b-form-group>
155 </b-col>
156 <b-col sm="6" lg="4" xl="3">
157 <b-form-group
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530158 :label="$t('pageDateTime.form.ntpServers.server3')"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500159 label-for="input-ntp-3"
160 >
161 <b-input-group>
162 <b-form-input
163 id="input-ntp-3"
164 v-model="form.ntp.thirdAddress"
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530165 :disabled="manualOptionSelected"
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530166 data-test-id="dateTime-input-ntpServer3"
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500167 />
168 </b-input-group>
169 </b-form-group>
170 </b-col>
171 </b-row>
Mateusz Gapski471f2e02020-07-27 14:43:26 +0200172 <b-button
173 variant="primary"
174 type="submit"
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530175 data-test-id="dateTime-button-saveSettings"
Mateusz Gapski471f2e02020-07-27 14:43:26 +0200176 >
177 {{ $t('global.action.saveSettings') }}
178 </b-button>
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500179 </b-form-group>
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500180 </b-form>
181 </page-section>
182 </b-container>
183</template>
184
185<script>
186import Alert from '@/components/Global/Alert';
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500187import PageTitle from '@/components/Global/PageTitle';
188import PageSection from '@/components/Global/PageSection';
189
190import BVToastMixin from '@/components/Mixins/BVToastMixin';
Yoshie Muranaka645250b2020-12-09 12:04:05 -0800191import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
192import LocalTimezoneLabelMixin from '@/components/Mixins/LocalTimezoneLabelMixin';
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500193import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700194import { useVuelidate } from '@vuelidate/core';
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500195
196import { mapState } from 'vuex';
Surya Venkatesan1b89e592024-09-25 11:59:49 +0530197import { requiredIf } from '@vuelidate/validators';
198import { helpers } from 'vuelidate/lib/validators';
Surya Vde23ea22024-07-11 15:19:46 +0530199import { useI18n } from 'vue-i18n';
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500200
Huy Le Anhb2ca5a52024-12-04 09:16:01 +0000201const isoDateRegex = /([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$)/;
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500202const isoTimeRegex = /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
203
204export default {
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530205 name: 'DateTime',
jason westoverd36ac8a2025-11-03 20:58:59 -0600206 components: { Alert, PageTitle, PageSection },
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500207 mixins: [
208 BVToastMixin,
209 LoadingBarMixin,
210 LocalTimezoneLabelMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500211 VuelidateMixin,
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500212 ],
Derick Montague602e98a2020-10-21 16:20:00 -0500213 beforeRouteLeave(to, from, next) {
214 this.hideLoader();
215 next();
216 },
Hariharan Rangasamyc5d60f52025-10-31 12:58:56 +0530217 emits: ['change'],
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700218 setup() {
219 return {
220 v$: useVuelidate(),
221 };
222 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500223 data() {
224 return {
Surya Vde23ea22024-07-11 15:19:46 +0530225 $t: useI18n().t,
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500226 locale: this.$store.getters['global/languagePreference'],
227 form: {
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530228 configurationSelected: 'manual',
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500229 manual: {
230 date: '',
Derick Montague602e98a2020-10-21 16:20:00 -0500231 time: '',
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500232 },
Derick Montague602e98a2020-10-21 16:20:00 -0500233 ntp: { firstAddress: '', secondAddress: '', thirdAddress: '' },
234 },
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800235 loading,
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500236 };
237 },
238 validations() {
239 return {
240 form: {
241 manual: {
242 date: {
Derick Montague602e98a2020-10-21 16:20:00 -0500243 required: requiredIf(function () {
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500244 return this.form.configurationSelected === 'manual';
245 }),
Derick Montague602e98a2020-10-21 16:20:00 -0500246 pattern: helpers.regex('pattern', isoDateRegex),
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500247 },
248 time: {
Derick Montague602e98a2020-10-21 16:20:00 -0500249 required: requiredIf(function () {
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500250 return this.form.configurationSelected === 'manual';
251 }),
Derick Montague602e98a2020-10-21 16:20:00 -0500252 pattern: helpers.regex('pattern', isoTimeRegex),
253 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500254 },
255 ntp: {
256 firstAddress: {
Derick Montague602e98a2020-10-21 16:20:00 -0500257 required: requiredIf(function () {
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500258 return this.form.configurationSelected === 'ntp';
Derick Montague602e98a2020-10-21 16:20:00 -0500259 }),
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500260 },
Derick Montague602e98a2020-10-21 16:20:00 -0500261 },
262 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500263 };
264 },
265 computed: {
266 ...mapState('dateTime', ['ntpServers', 'isNtpProtocolEnabled']),
267 bmcTime() {
268 return this.$store.getters['global/bmcTime'];
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500269 },
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530270 ntpOptionSelected() {
271 return this.form.configurationSelected === 'ntp';
272 },
273 manualOptionSelected() {
274 return this.form.configurationSelected === 'manual';
275 },
Dixsie Wolmersfcda2002020-07-29 14:18:44 -0500276 isUtcDisplay() {
277 return this.$store.getters['global/isUtcDisplay'];
278 },
279 timezone() {
280 if (this.isUtcDisplay) {
281 return 'UTC';
282 }
283 return this.localOffset();
Derick Montague602e98a2020-10-21 16:20:00 -0500284 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500285 },
286 watch: {
287 ntpServers() {
288 this.setNtpValues();
289 },
290 manualDate() {
291 this.emitChange();
Sukanya Pandeyce33f212020-08-28 13:13:05 +0530292 },
293 bmcTime() {
Surya Vde23ea22024-07-11 15:19:46 +0530294 this.form.manual.date = this.$filters.formatDate(
Ed Tanous81323992024-02-27 11:26:24 -0800295 this.$store.getters['global/bmcTime'],
Sukanya Pandeyce33f212020-08-28 13:13:05 +0530296 );
Surya Vde23ea22024-07-11 15:19:46 +0530297 this.form.manual.time = this.$filters
Sukanya Pandeyce33f212020-08-28 13:13:05 +0530298 .formatTime(this.$store.getters['global/bmcTime'])
299 .slice(0, 5);
Derick Montague602e98a2020-10-21 16:20:00 -0500300 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500301 },
302 created() {
303 this.startLoader();
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530304 this.setNtpValues();
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500305 Promise.all([
306 this.$store.dispatch('global/getBmcTime'),
Derick Montague602e98a2020-10-21 16:20:00 -0500307 this.$store.dispatch('dateTime/getNtpData'),
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500308 ]).finally(() => this.endLoader());
309 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500310 methods: {
311 emitChange() {
Surya Vde23ea22024-07-11 15:19:46 +0530312 if (this.v$.$invalid) return;
313 this.v$.$reset(); //reset to re-validate on blur
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500314 this.$emit('change', {
Derick Montague602e98a2020-10-21 16:20:00 -0500315 manualDate: this.manualDate ? new Date(this.manualDate) : null,
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500316 });
317 },
318 setNtpValues() {
319 this.form.configurationSelected = this.isNtpProtocolEnabled
320 ? 'ntp'
321 : 'manual';
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530322 [
323 this.form.ntp.firstAddress = '',
324 this.form.ntp.secondAddress = '',
325 this.form.ntp.thirdAddress = '',
326 ] = [this.ntpServers[0], this.ntpServers[1], this.ntpServers[2]];
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500327 },
328 submitForm() {
Surya Vde23ea22024-07-11 15:19:46 +0530329 this.v$.$touch();
330 if (this.v$.$invalid) return;
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500331 this.startLoader();
332
333 let dateTimeForm = {};
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500334 let isNTPEnabled = this.form.configurationSelected === 'ntp';
335
336 if (!isNTPEnabled) {
Sukanya Pandeyb5c161b2020-07-30 21:56:03 +0530337 const isUtcDisplay = this.$store.getters['global/isUtcDisplay'];
338 let date;
339
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500340 dateTimeForm.ntpProtocolEnabled = false;
Sukanya Pandeyb5c161b2020-07-30 21:56:03 +0530341
342 if (isUtcDisplay) {
343 // Create UTC Date
344 date = this.getUtcDate(this.form.manual.date, this.form.manual.time);
345 } else {
346 // Create local Date
347 date = new Date(`${this.form.manual.date} ${this.form.manual.time}`);
348 }
349
350 dateTimeForm.updatedDateTime = date.toISOString();
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500351 } else {
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500352 dateTimeForm.ntpProtocolEnabled = true;
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530353
Kenneth84ec88f2021-11-11 14:41:04 -0600354 const ntpArray = [
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530355 this.form.ntp.firstAddress,
356 this.form.ntp.secondAddress,
357 this.form.ntp.thirdAddress,
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500358 ];
Kenneth84ec88f2021-11-11 14:41:04 -0600359
360 // Filter the ntpArray to remove empty strings,
361 // per Redfish spec there should be no empty strings or null on the ntp array.
362 const ntpArrayFiltered = ntpArray.filter((x) => x);
363
364 dateTimeForm.ntpServersArray = [...ntpArrayFiltered];
365
366 [this.ntpServers[0], this.ntpServers[1], this.ntpServers[2]] = [
367 ...dateTimeForm.ntpServersArray,
368 ];
369
370 this.setNtpValues();
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500371 }
372
373 this.$store
Sandeepa Singhf67f7692021-07-19 18:04:18 +0530374 .dispatch('dateTime/updateDateTime', dateTimeForm)
Derick Montague602e98a2020-10-21 16:20:00 -0500375 .then((success) => {
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500376 this.successToast(success);
377 if (!isNTPEnabled) return;
378 // Shift address up if second address is empty
379 // to avoid refreshing after delay when updating NTP
Sukanya Pandey6b5ff102021-05-10 14:07:15 +0530380 if (!this.form.ntp.secondAddress && this.form.ntp.thirdAddres) {
381 this.form.ntp.secondAddress = this.form.ntp.thirdAddres;
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500382 this.form.ntp.thirdAddress = '';
383 }
384 })
Dixsie Wolmersecd45a82020-07-14 17:07:26 -0500385 .then(() => {
386 this.$store.dispatch('global/getBmcTime');
387 })
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500388 .catch(({ message }) => this.errorToast(message))
389 .finally(() => {
Surya Vde23ea22024-07-11 15:19:46 +0530390 this.v$.form.$reset();
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500391 this.endLoader();
392 });
Sukanya Pandeyb5c161b2020-07-30 21:56:03 +0530393 },
394 getUtcDate(date, time) {
395 // Split user input string values to create
396 // a UTC Date object
397 const datesArray = date.split('-');
398 const timeArray = time.split(':');
399 let utcDate = Date.UTC(
400 datesArray[0], // User input year
Sukanya Pandey5a705962020-08-05 00:52:28 +0530401 //UTC expects zero-index month value 0-11 (January-December)
402 //for reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC#Parameters
403 parseInt(datesArray[1]) - 1, // User input month
Sukanya Pandeyb5c161b2020-07-30 21:56:03 +0530404 datesArray[2], // User input day
405 timeArray[0], // User input hour
Ed Tanous81323992024-02-27 11:26:24 -0800406 timeArray[1], // User input minute
Sukanya Pandeyb5c161b2020-07-30 21:56:03 +0530407 );
408 return new Date(utcDate);
Derick Montague602e98a2020-10-21 16:20:00 -0500409 },
410 },
Dixsie Wolmers739e4592020-06-05 07:00:06 -0500411};
412</script>