2012-12-18 47 views
2

我在發佈帶有日期時間值的editform時遇到問題。我有一個用getTimeZonOffset設置localdatetime的腳本。第一次當我想從數據庫的utc時間顯示在本地時間它的工作原理。問題是當我想用datetimepicker編輯表單時。新值存儲在數據庫中,每次用戶點擊提交按鈕時,它都會再次添加本地時間。如何在發佈表單時將datetimepicker設置爲本地時間

我該如何避免這種情況?

$(function() { 
    // Determine timezone offset in milliseconds 
var d = new Date(); 
var offsetms = d.getTimezoneOffset() * 60 * 1000; 

    $('.UTCTime input').each(function() { 
     try 
     {  
      var text = $(this).val(); 
      var n = new Date(text); 
      n = new Date(n.valueOf() - offsetms); 

      var curr_date = n.getDate(); 
      var curr_month = n.getMonth() + 1; //Months are zero based 
      var curr_year = n.getFullYear(); 
      var curr_hour = n.getHours(); 
      var curr_minutes = n.getMinutes(); 

      $(this).val(curr_year + "/" + curr_month + "/" + curr_date + " " + curr_hour + ":" + curr_minutes); 

     } 
     catch (ex) { 
      console.warn("Error converting time", ex); 
     } 
    }); 
}); 

$(function() { 
$(".datetimepicker input").datetimepicker({ 
    dateFormat: "yy/mm/dd", 
    showTime: true, 
}); 
}); 

<div class="span3 value UTCTime datetimepicker"> 
+0

您是否已得到答案? –

回答

0

讓你的數據庫的用戶名和時區唯一索引,這意味着當前時區不能再重新輸入可以爲它可更新的同一個用戶。

如果你有那麼MySQL數據庫使用INSERT INTO表上的重複密鑰更新....

希望這會給你正確的想法。

+0

我真的不得不改變數據庫。不知何故,當我使用我的datetimepicker時,只是添加getTimezoneOffset。 – bassen

+0

那麼,如果你不想在你的數據庫中得到重複,並避免寫大量的查詢然後使用它。你可以用其他方法編寫附加查詢來檢查這個用戶是否設置了自己的時區,如果他設置瞭然後重寫它。但是,只有使用Javascript才能獲得localTimeZone(用戶時區)。 – James

1

它看起來像你的腳本將覆蓋已保存的任何值,當你編輯

您需要添加某種檢查設置日期時間值時,所以你不要忽略它

if(!$(this).val()) { 
     $(this).val(curr_year + "/" + curr_month + "/" + curr_date + " " + curr_hour + ":" + curr_minutes); 
} 

你可能如果您有其他默認值,則必須更改if條件

+0

我不認爲這對我有用。我發現了一個解決方案,它在函數發佈前將日期值設置爲utc。除了n = new Date(n.valueOf()+ offsetms)外,它看起來與上面的函數完全一樣。但我不認爲這是最好的解決方案。 – bassen

相關問題