2016-12-26 41 views
2

我正在使用ASP MVC 4.5。我有意輸入付款細節。當用戶輸入付款時,我使用C#獲取當前時間。但是在將它託管在服務器上之後,我發現了一個熱門錯誤。它會得到另一個dateTime(可能是我服務器的時間),而不是我用戶的本地時間! 我想用C#獲取用戶的當前時間。我應該使用C#還是JavaScript? 我認爲使用javascript很容易獲得用戶的時間。但是我想爲此使用C#。你可以幫我嗎? 我的網絡API:獲取本地日期時間,而不是服務器端代碼中的服務器DateTime C#

// POST api/PaymentApi 
    public HttpResponseMessage PostPayment(Payment payment) 
    { 
     if (ModelState.IsValid) 
     { 
      var mem= db.Members.Where(m => m.MemberID.Equals(payment.MemberID)).FirstOrDefault(); 

      if (mem ==null) 
      { 
       return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); 
      } 


      payment.Date = DateTime.Now; 
      db.Payments.Add(payment); 
      db.SaveChanges(); 

      HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, payment); 
      response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = payment.PaymentID })); 
      return response; 
     } 
     else 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); 
     } 
    } 

我用payment.Date = DateTime.Now.ToLocalTime();也但不工作的!

許多在這裏回答使用JavaScript日期。這就是我使用它的原因。但是,JavaScript發送日期時間,我的WebApi使它稍有不同。
的Javascript:Date:Tue Dec 27 2016 11:04:12 GMT+0600 (Local Standard Time) C#:Date:{27/12/2016 05:04:12} enter image description here

+1

你檢查了文化嗎? –

+1

在服務器*上運行*的任何.NET代碼將只能看到*服務器時間*。你需要做的是在客戶端上運行代碼以獲取那裏的時間,然後將其發送到服務器。但是,是什麼讓你認爲時間將與你的服務器有很大的不同?你確定你不想要UTC時間嗎? –

+0

不,我只是想獲得客戶的時間誰將提交付款。 – Fawel

回答

0

DateTime作品與本地主機的時鐘,例如服務器。大多數支付系統將日期保存爲UTC,以避免客戶端/服務器時間差異。

payment.Date = DateTime.UtcNow; 
+0

理查德的結果是什麼? – Fawel

1

如果客戶端不是自己發送它,在服務器端不可能獲得DateTime客戶端。

0

有沒有什麼辦法從服務器知道用戶本地時間。您需要做的是將本地時間從客戶端發送到UTC格式的請求中的服務器。

的Javascript(需要jQuery的):

var UTC = new Date().getTime(); 
+0

OP沒有使用Javascript。 –

1

你需要可以在javascript本地日期時間,並將它傳遞給服務器。我建議你使用ISO8601格式。

相關問題