momentLocale is being ignored - Editor 2.0.6
momentLocale is being ignored - Editor 2.0.6
I am still trying to migrate from Editor 1.9.3 to Editor 2.0.6.
I am using moment.js for my bilingual website (momentLocale: "de" or "en-gb" as opposed to the American "en").
This is the code I use:
if (lang === 'de') {
moment.locale('de');
momentLocale = 'de';
} else {
moment.locale('en-gb');
momentLocale = 'en-gb';
}
// https://datatables.net/blog/2014-12-18 Ultimate date/time sorting
$.fn.dataTable.moment( 'L', momentLocale );
//Editor datetime field definition:
.....
}, {
label: lang === 'de' ? 'Ende (bzw. Zinsbindung):' : 'End Date:',
name: "fixed.end_date",
attr: {
class: dateMask
},
type: "datetime",
def: function () {
return '';
},
format: 'L',
// format: "DD.MM.YYYY",
opts: {
showWeekNumber: true,
yearRange: 40,
momentLocale: momentLocale
}
}, {
.....
These are the moment files I use:
<!-- Moment.js: -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<!-- Locales for moment.js-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/de.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/en-gb.js"></script>
If you take a look at the locale files you can see what format "L" means:
- en-gb: L : 'DD/MM/YYYY',
- de: L : 'DD.MM.YYYY',
If I hard code those formats like in the commented line above (format: "DD.MM.YYYY",): Works. If I don't (format: 'L',), the American format MM/DD/YYYY is returned from the date picker. Hence I believe the moment settings are partly being ignored by the new Datetime library for Editor. All of this had worked perfectly in Editor 1.9.3 and previous versions.
This is what it looks like using "L" as the format:
The date picker looks normal with language "de". But now it ignores the date that had already been set, opens the current month and preselects the current day which is another error.
Picking the date 14 February 2022 you get this (American format with German date points inside due to date masking that I use)
This German looking date isn't only wrong but it is also invalid because there is no month 14.
This question has accepted answers - jump to:
Answers
Just did a quick compare of the Editor 1.9.3 code and the code of the new DateTime-1.1.2 lib.
While the former has 5 occurences of "momentLocale" the latter has ZERO. Looks like that "momentLocale" is being ignored ... Is that intentionally so?
It is still in the dateTime docs:
https://editor.datatables.net/reference/field/datetime
Found "locale" in the new library. 3 times. So the locale wasn't discarded, just renamed.
And the last one for today: There was nothing in the console and no obvious error on the client side - only PHP crashed due to the unexpected American date format sent to the server.
Sorry - DateTime supports Luxon as well as Moment, which is why it removed mention of the
momentLocale
option. However, Editor hasn't actually been updated to match that, so at the moment you'll need to specify bothlocal
andmomentLocale
:That's obviously redundant and I'll get that fixed.
Allan
ok, in the meantime I implemented a hack by just renaming "locale" with "momentLocale" in the combined Editor / Datetime code.
I very much hope that I won't have to rename the 196 occurences of "momentLocale" in my code with "locale"!
How will I learn that you made the change? Thanks.
Oh wow - that's a lot setting of that value! We perhaps need to have a way to define defaults for this values.
Currently I've got it scheduled for Editor 2.1 to address this, that is probably a few months away. As a quick fix for your use case search for this in the Editor JS:
Change it to be:
Allan
Well, it has become a pretty large application with three subsystems in the meantime. If I could define defaults for this stuff like below that would be highly appreciated! Thanks for the update!
Yes, I think that is basically the sort of structure that would be needed.
I'll look into that for 2.1 as well.
Allan
An old thread this - sorry for the massive delay! I've sorted this out for 2.1 now, which should drop before the end of the month (that's the plan anyway!).
momentLocale
andmomentStrict
are now propagated into theDateTime
instance (locale
andstrict
). Furthermore, the Editor part of the code doesn't actually use Moment / Luxon at all now - instead relying on DateTime to do all transforms required, so the locale will be consistent for all operations on the field.momentLocale
andmomentStrict
are legacy parameters and are now removed from the documentation. They will continue to work as expected due to the mapping, but new projects should use theopts.locale
andopts.strict
options forDateTime
.Allan