Use case
I’m setting up a View in /admin/ to list Nodes with a Date Created column. To refine the nodes I want two filters that can select nodes within a date range, a date equal or greater than and equal to and less than.
Problem
By default JQuery UI uses the American dateformat. MM/DD/YYYY. This means that if you are using a non US dateformat for everything else eg YYYY/MM/DD your exposed Views filter input field will get an invalid date.
This issue has been floating around for over 6 years!
Solution
Create or add to a custom module which includes some JS as a Library to set the date format, dependent on whether the user is in admin or not.
Create custom module
Assuming you know how to work with custom modules…
JS
prefix_example/js/bef-datepicker.js
(function ($, Drupal, drupalSettings) { $('.bef-datepicker').each(function(i, obj) { $(obj).datepicker({ dateFormat: 'yy-mm-dd' }); }); })(jQuery, Drupal, drupalSettings);
Module
prefix_example/prefix_example.module
/* * Implements hook_js_alter(). */ function prefix_example_js_alter(&$js) { $js['settings']['data'][] = array('better_exposed_filters'=> array('bef_dateformat'=>'yy/mm/dd')); } /** * Implements hook_preprocess_page(). */ function prefix_example_preprocess_page(&$variables) { if (\Drupal::currentUser()->hasPermission('access administration pages')) { $variables['#attached']['library'][] = 'prefix_example/bef-datepicker'; } }
Library
prefix_example/prefix_example.libraries.yaml
bef-datepicker: version: 1.x js: js/bef-datepicker.js: {} dependencies: - core/jquery
Dependencies
prefix_example/prefix_example.info.yaml
dependencies: - better_exposed_filters:better_exposed_filters