Почему datetimepicker портит значение года, если минуты / секунды / миллисекунды равны '0' - PullRequest
0 голосов
/ 24 июня 2018

Я использую Bootstrap datatimepicker в модели представления Knockout.js. Вот настройки:

ko.bindingHandlers.dateTimePicker = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        //initialize datepicker with some optional options
        var options = allBindingsAccessor().dateTimePickerOptions || {};
        options['format'] = options['format'] || "dddd, Do MMMM YYYY, HH:mm"; //default format
        options.ignoreReadonly = true;
        options.defaultDate = valueAccessor()();
        $(element).datetimepicker(options);

        //when a user changes the date, update the view model
        ko.utils.registerEventHandler(element, "dp.change", function (event) {
            ignoreReadonly: true;
            var value = valueAccessor();
            if (ko.isObservable(value)) {
                if (event.date !== null && !(event.date instanceof Date)) {
                    value(event.date.toDate());
                } else {
                    value(event.date);
                }
            }
        });

        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            var picker = $(element).data("DateTimePicker");
            if (picker) {
                picker.destroy();
            }
        });
    },
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        var picker = $(element).data("DateTimePicker");
        //when the view model is updated, update the widget
        if (picker) {
            var koDate = ko.utils.unwrapObservable(valueAccessor());

            //in case return from server datetime i am get in this form for example /Date(93989393)/ then fomat this
            koDate = (typeof (koDate) !== 'object') ? new Date(parseFloat(koDate.replace(/[^0-9]/g, ''))) : koDate;

            picker.date(koDate);
        }
    }
};

Если datetimepicker считывает значение datetime, в котором либо минут , либо секунд , либо миллисекунд равно '0', тогда он делает что-то странное для значение года.

Вот пример. В этом случае обе секунды и миллисекунды равны '0':

  1. значение базы данных: 2018-06-23 12: 49: 00.0000000 ;

  2. начальный Значение модели просмотра Json: 2018-06-23T12: 49: 00;

  3. значение модели представления после мой datetimepicker «инициализирован» значение (обратите внимание на странное значение года '2609'): вс 2 июля 2609 01:38:44 GMT + 0100 (британское летнее время); и

  4. элемент управления выглядит так:

enter image description here

То же самое происходит, если любая или все минуты, секунды или миллисекунды равны '0'.

В отличие, например, 2018-06-23 14: 08: 05.9288927 не будет демонстрировать это поведение:

enter image description here

Код, который я имею для «инициализации» или чтения значения для datetimepicker, делает что-то странное. Но я не смог это исправить. Кто-нибудь может помочь?

...