获取没有时区的用户选择的日期

时间:2016-05-17 05:28:40

标签: javascript json date jquery-ui knockout.js

我的表单中有一些日期字段,我使用JqueryUI datepicker来为用户选择日期。当用户选择日期时,日期应以dd/mm/yy格式显示。我使用KnockoutJS来管理客户端的数据绑定,并使用KO JqueryUI的{​​{1}}绑定处理程序:

datepicker

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

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

UTC

我想要的是使用datepicker获取用户在表单中选择的任何日期,没有任何时区,简单明了。我怎么能这样做? moment.utc(selectedDateObject).toDate() 对象似乎在javascript中变得不必要地复杂化。

1 个答案:

答案 0 :(得分:0)

您需要覆盖toJSON函数。

有关详细信息,请参阅Moment Docs,但基本上您需要执行此类操作

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