Opened 9 years ago
Last modified 8 months ago
#25857 new New feature
DateTimeShortcuts.js could try and consume all DATE_INPUT_FORMATS.
Reported by: | Keryn Knight | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | dev |
Severity: | Normal | Keywords: | calendar |
Cc: | django@…, Ülgen Sarıkavak | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Relates to: #25856, #25024, #23049
Currently, there are 3 uses of DATE_INPUT_FORMATS
in the DateTimeShortcuts part of the JS calendar widget.
Their use is always get_format('DATE_INPUT_FORMATS')[0]
which means if your first DATE_INPUT_FORMAT
is not JS compatible (see, eg: #25856, #23049) the string written back to the input will include undefined
Here's a proposed proof-of-concept solution to get a first compatible match which would pass on both JS and Python sides.
The slightly complexity lies in the fact that rather than an exception, new Date('undefined')
actually just yields a string of Invalid Date
when used. However, even when given valid a date without a time portion, getTime
should always yield either NaN
or an integer.
DateTimeShortcuts.tryFormats = function(date) { var dateFormats = get_format('DATE_INPUT_FORMATS'); for (var i=0; i < dateFormats.length; i++) { var currentFormat = dateFormats[i]; var dateStr = date.strftime(currentFormat); var madeDate = new Date(dateStr); if (isNaN(madeDate.getTime()) === false) { return {format: currentFormat, value: dateStr}; } } return {format: void(0), value: void(0)}; DateTimeShortcuts.bestDateFormat = DateTimeShortcuts.tryFormats(new Date())['format'];
(NB: bestDateFormat
would perhaps be better served by being set in DateTimeShortcuts.init
but whatever)
and then usages of get_format('DATE_INPUT_FORMATS')[0]
could be replaced with DateTimeShortcuts.bestDateFormat
in:
handleCalendarCallback
handleCalendarQuickLink
openCalendar
Not sure what would be best in the case where there are no valid formats (format
would be undefined
)
So, given the following:
"DATE_INPUT_FORMATS": [ "%B %d, %Y", "%d/%m/%Y", "%m/%d/%Y" ]
the best match would be "%d/%m/%Y" because %B is unsupported (#25856).
Change History (2)
comment:1 by , 9 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 8 months ago
Cc: | added |
---|
My knowledge of localization is limited, but this seems to make sense. Maybe other experts can offer some advice.