2016-06-21 110 views
3

我有一個奇怪的情況。當我從視圖發送日期時間值到控制器與Ajax,在控制器中的值改變。日期發生變化時,發送到控制器與AJAX

例如,如果我的視圖有'30 -08-2014'值(dd-MM-yyyy格式),則在我的控制器中收到'29-08-2014 23:00:00'。

我認爲這個問題是一個無效的時區,但無論是瀏覽器和應用程序(控制器)在我的本地計算機上運行,​​所以他們應該有相同的時區

我當前時區爲UTC -04:00聖地亞哥

此代碼生成的註釋問題

索引視圖

@{ 
    Layout = ""; 
} 

<html> 
<head> 
    <script src="@Url.Content("~/Content/Plugins/jQuery/jquery-1.11.3.min.js")"></script> 

    <script type="text/javascript" language="javascript"> 
     $(document).ready(function() { 
      $('#send-date').on('click', function() { 
       $('#value-from-user').val($('#my-date').val().toDate().toISOString()); 
       var myData = { myDate: $('#my-date').val().toDate().toISOString() }; 
       $.ajax("Test/Date", { 
        data: myData, 
        dataType: 'HTML', 
        processData: true, 
        method: 'POST', 
        success: function(data) { 
         $('#result').html(data); 
        } 
       }); 
      }); 
     }); 

     //input is dd-MM-yyyy format 
     String.prototype.toDate = function() { 
      var parts = this.split("-"); 
      return new Date(parts[2], parts[1] - 1, parts[0]); 
     } 
    </script> 
</head> 
<body> 
<input type="text" id="value-from-user" disabled/> <br /> 
<label for="my-date">Input in dd-MM-yyyy format</label><input type="text" name="my-date" id="my-date" value="30-08-2014"/> <br/> 
<input type="button" name="send-date" id="send-date" value="Send Date"/><br/> 
<div id="result"> 

</div> 
</body> 
</html> 

日期查看

@model DateTime 
@{ 
    Layout = ""; 
} 

@string.Format("Input date is {0}", Model.ToString("dd-MM-yyyy HH:mm:ss.fff tt")) 

控制器

public class TestController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult Date(DateTime myDate) 
     { 
      return PartialView(myDate); 
     } 
    } 
+1

Acording到文檔(HTTPS://developer.mozilla .org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString),在toISOString()時區始終爲零的UTC偏移量。 –

回答

3

您正在發送轉換爲ISO字符串的數據。 ISO使用UTC。然後,控制器在它自己的時區(而不是UTC)中解釋日期值,因爲它不知道更好。總之,不要使用.toISOString()。尤其是,如果你所關心的只是日期部分,那麼你只會在時間流逝的時候自己射擊。只需通過格式爲YYYY-MM-DD即可。

1

改變這種

$.ajax("Test/Date", { 
       data: myData, 
       dataType: 'HTML', 
       processData: true, 
       method: 'POST', 
       success: function(data) { 
        $('#result').html(data); 
       } 
      }); 

$.ajax("Test/Date", { 
       data: myData,      
       method: 'POST', 
       success: function(data) { 
        $('#result').html(data); 
       } 
      }); 

更新

enter image description here

如您在toISOString()是即將控制器中的值看到的問題是價值觀在javascript alert表現。

0

enter image description here

的問題,因爲你在toISOString()的值即將控制器看到的是值顯示在JavaScript警告

相關問題