获取用户选择的不带时区的日期

get date selected by user without timezone

本文关键字:时区 日期 选择 获取 用户      更新时间:2023-09-26

我的表单中有几个日期字段,我使用JqueryUI datepicker供用户选择日期。用户选择日期时,日期应以dd/mm/yy格式显示。我使用KnockoutJS来管理客户端的数据绑定,并使用以下JqueryUI datepickerKO绑定处理程序:

ko.bindingHandlers.datepicker = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var options = allBindingsAccessor().datepickerOptions || { dateFormat: 'dd/mm/yy' };
        $(element).datepicker(options);
        ko.utils.registerEventHandler(element, "change", function () {
            var observable = valueAccessor();
            observable($(element).datepicker("getDate"));
        });
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $(element).datepicker("destroy");
        });
    },
    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            current = $(element).datepicker("getDate");

        if (value - current !== 0) {
            $(element).datepicker("setDate", value);
        }
    }
};

现在,当用户选择日期时,它在input text字段中以dd/mm/yy格式正确显示,并且在KO observable中捕获javascript Date对象以及时区。我使用ko.toJSON()函数将包含各种日期字段的整个复杂javascript object转换为JSON字符串,并在后端对其进行反序列化。

我面临的问题是,当javascript Date对象转换为JSON字符串时,它会从用户选择的日期减少一天,我认为这是因为本地时区,这是javascript日期对象的默认行为。我还尝试了momentJs库,使用以下代码从所选日期获取UTC日期,但这似乎不起作用:

moment.utc(selectedDateObject).toDate()

我想要的是使用日期选择器获取用户在表单中选择的任何日期,而不需要任何时区,简单明了。我该怎么办?Date对象在javascript中似乎变得不必要地复杂。

您需要覆盖当前的toJSON函数。

请参阅Moment Docs了解更多详细信息,但基本上你需要做一些类似的事情

moment.fn.toJSON = function () {
    return this.format('YYYY-MM-DDTHH:mm:ss'); //Or any desired format
};