2016-05-17 53 views
0

我有几个日期字段在我的表单中,我使用JqueryUIdatepicker供用户选择日期。用户选择日期时应以dd/mm/yy格式显示日期。我使用KnockoutJS来管理数据在客户端的结合,并使用以下KOJqueryUIdatepicker结合处理:获取用户选择的时区没有时区

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格式在inputtext场一个javascriptDate对象与时区一起在KOobservable中被捕获。我正在使用ko.toJSON()函数将包含各种日期字段的整个复杂javascript object转换为JSON字符串,并在后端对其进行反序列化。

我面临的问题是,当javascriptDate对象转换为JSON串,它减少了从其中我假定用户选择日期1天是因为当地时区的,这是默认行为的javascript日期的对象。我也曾尝试momentJs库使用下面的代码从选定的日期UTC日期但这似乎并没有工作:

moment.utc(selectedDateObject).toDate() 

我想是要什么有什么最新的用户使用的形式选择没有任何时区的日期选择器,简单明了。我怎么去解决这个问题?对象似乎在javascript中得到了不必要的复杂化。

+0

时刻(selectedDateObject).format( 'L') - 这可以帮助你吗? – Shrabanee

+0

@ titi23这不起作用...当我打电话给'ko.toJSON()',有一​​天从选定的日期减少... – seadrag0n

+1

你可以显示一些工作代码,因为这样帮助你很困难。必须尝试使用​​Javascript的getUTCDate()? – Shrabanee

回答

0

您需要重写时刻的JSON函数。

请参阅Moment Docs更多细节,但基本上你需要做这样的事情

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