Fix date parser on Daylight Saving time day with 12h format #1011

This commit is contained in:
yflory 2023-11-09 16:58:53 +01:00
parent 210606758b
commit 0a1ac01a45
7 changed files with 31 additions and 18 deletions

View File

@ -19,6 +19,7 @@ define([
'/calendar/export.js',
'/calendar/recurrence.js',
'/lib/datepicker/flatpickr.js',
'/lib/calendar/date-picker.js',
'/common/inner/share.js',
'/common/inner/access.js',
@ -51,6 +52,7 @@ define([
Export,
Rec,
Flatpickr,
DatePicker,
Share, Access, Properties
)
{
@ -283,9 +285,9 @@ define([
var obj = data.content[uid];
obj.title = obj.title || "";
obj.location = obj.location || "";
if (obj.isAllDay && obj.startDay) { obj.start = +Flatpickr.parseDate((obj.startDay)); }
if (obj.isAllDay && obj.startDay) { obj.start = +DatePicker.parseDate((obj.startDay)); }
if (obj.isAllDay && obj.endDay) {
var endDate = Flatpickr.parseDate(obj.endDay);
var endDate = DatePicker.parseDate(obj.endDay);
endDate.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);
@ -1639,7 +1641,7 @@ APP.recurrenceRule = {
minDate: date,
//dateFormat: dateFormat,
onChange: function () {
//endPickr.set('minDate', startPickr.parseDate(s.value));
//endPickr.set('minDate', DatePicker.parseDate(s.value));
}
});
var endDate = new Date(+date);
@ -1817,7 +1819,7 @@ APP.recurrenceRule = {
if (until === "count") {
rec.count = $(radioCount).find('input[type="number"]').val();
} else if (until === "date") {
var _date = Flatpickr.parseDate(pickr.value);
var _date = DatePicker.parseDate(pickr.value);
_date.setDate(_date.getDate()+1);
rec.until = +_date - 1;
}
@ -2110,7 +2112,7 @@ APP.recurrenceRule = {
var $button = $el.find('.tui-full-calendar-section-button-save');
var $startDate = $el.find('#tui-full-calendar-schedule-start-date');
var startDate = Flatpickr.parseDate($startDate.val());
var startDate = DatePicker.parseDate($startDate.val());
var divRec = getRecurrenceInput(startDate);
$button.before(divRec);

View File

@ -8,8 +8,8 @@ define([
'/common/common-constants.js',
'/customize/messages.js',
'/customize/pages.js',
'/lib/datepicker/flatpickr.js',
], function($, h, Hash, UI, UIElements, Util, Constants, Messages, Pages, Flatpickr) {
'/lib/calendar/date-picker.js',
], function($, h, Hash, UI, UIElements, Util, Constants, Messages, Pages, DatePicker) {
var handlers = {};
@ -544,7 +544,7 @@ define([
var nowDateStr = new Date().toLocaleDateString();
var startDate = new Date(start);
if (msg.isAllDay && msg.startDay) {
startDate = Flatpickr.parseDate(msg.startDay);
startDate = DatePicker.parseDate(msg.startDay);
}
// Missed events

View File

@ -8,10 +8,10 @@ define([
'/customize/messages.js',
'/components/nthen/index.js',
'chainpad-listmap',
'/lib/datepicker/flatpickr.js',
'/lib/calendar/date-picker.js',
'/components/chainpad-crypto/crypto.js',
'/components/chainpad/chainpad.dist.js',
], function (Util, Hash, Constants, Realtime, Cache, Rec, Messages, nThen, Listmap, FP, Crypto, ChainPad) {
], function (Util, Hash, Constants, Realtime, Cache, Rec, Messages, nThen, Listmap, DatePicker, Crypto, ChainPad) {
var Calendar = {};
var getStore = function (ctx, id) {
@ -132,9 +132,9 @@ define([
var last = ctx.store.data.lastVisit;
if (ev.isAllDay) {
if (ev.startDay) { ev.start = +FP.parseDate(ev.startDay); }
if (ev.startDay) { ev.start = +DatePicker.parseDate(ev.startDay); }
if (ev.endDay) {
var endDate = FP.parseDate(ev.endDay);
var endDate = DatePicker.parseDate(ev.endDay);
endDate.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);

View File

@ -23,6 +23,7 @@ define([
'/common/text-cursor.js',
'cm/lib/codemirror',
'/components/chainpad/chainpad.dist.js',
'/lib/calendar/date-picker.js',
'/common/inner/share.js',
'/common/inner/access.js',
@ -70,6 +71,7 @@ define([
TextCursor,
CMeditor,
ChainPad,
DatePicker,
Share, Access, Properties,
Flatpickr,
Sortable
@ -2046,7 +2048,7 @@ define([
tag: tag,
isEmpty: function () { return !$tag.val().trim(); },
getValue: function () {
var d = picker.parseDate(tag.value);
var d = DatePicker.parseDate(tag.value);
return +d;
},
setValue: function (val) {
@ -4797,7 +4799,7 @@ define([
if (datePicker.value === '') {
return void refreshEndDate();
}
var d = picker.parseDate(datePicker.value);
var d = DatePicker.parseDate(datePicker.value);
content.answers.endDate = +d;
framework.localChange();
framework._.cpNfInner.chainpad.onSettle(function () {

View File

@ -1,9 +1,10 @@
define([
'jquery',
'/lib/datepicker/flatpickr.js',
'/lib/calendar/moment.min.js',
'css!/lib/datepicker/flatpickr.min.css',
], function ($, Flatpickr) {
], function ($, Flatpickr, Moment) {
var createRangePicker = function (cfg) {
var start = cfg.startpicker;
var end = cfg.endpicker;
@ -15,6 +16,10 @@ define([
} catch (e) {}
if (!is24h) { dateFormat = "Y-m-d h:i K"; }
var parseDate = (value) => {
return Moment(value, 'YYYY-MM-DD HH:mm a').toDate();
};
var e = $(end.input)[0];
var endPickr = Flatpickr(e, {
enableTime: true,
@ -30,7 +35,7 @@ define([
time_24hr: is24h,
dateFormat: dateFormat,
onChange: function () {
endPickr.set('minDate', startPickr.parseDate(s.value));
endPickr.set('minDate', parseDate(s.value));
}
});
startPickr.setDate(start.date);
@ -39,11 +44,11 @@ define([
var getStartDate = function () {
setTimeout(function () { $(startPickr.calendarContainer).remove(); });
return startPickr.parseDate(s.value);
return parseDate(s.value);
};
var getEndDate = function () {
setTimeout(function () { $(endPickr.calendarContainer).remove(); });
var d = endPickr.parseDate(e.value);
var d = parseDate(e.value);
if (endPickr.config.dateFormat === "Y-m-d") { // All day event
// Tui-calendar will remove 1s (1000ms) to the date for an unknown reason...
@ -59,6 +64,7 @@ define([
};
};
return {
parseDate: parseDate,
createRangePicker: createRangePicker
};
});

2
www/lib/calendar/moment.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -15,4 +15,5 @@ This file is intended to be used as a log of what third-party source we have ven
* [asciidoc.js 2.0.0](https://github.com/asciidoctor/codemirror-asciidoc/releases/tag/2.0.0) with slight changes to match the format of other codemirror modes
* [Asciidoctor.js 2.2.6](https://github.com/asciidoctor/asciidoctor.js/releases/tag/v2.2.6) for AsciiDoc rendering
* [Rangy 1.3.0](https://github.com/timdown/rangy/tree/1.3.0) for cursor management. NOTE: [A CVE](https://github.com/advisories/GHSA-65rp-mhqf-8gj3) exists for this version but CryptPad isn't affected
* [Moment v2.29.4](http://momentjs.com/) for providing a date parser