2016-05-17 48 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 
};