2012-10-19 28 views
5

Bizim başvurumuz heavilly, javascript (jQuery) belgesine dayanır. Yani bir çok 'uygulama/json' talebi var.Bir ASP.NET MVC - Javascript uygulamasında tarihlerle baş etmenin en iyi yolu

Bir süredir tarihlerle uğraşıyoruz, ancak çabalarımıza rağmen, , ASP.NET MVC uygulamasında bunun nasıl ele alınacağını belirleyemedik. İşte

ne istediğimizi: (tercihen DateTimeKind.Utc birlikte) sunucu tarafında

  1. serialize/serisi kaldırılmaya DateTime nesneler.
  2. İstemci tarafında Date nesnesiyle çalışın. UTC ile onunla çalışın. Tarihleri ​​bir şekilde biçimlendir. İşte

sorunlar şunlardır:

  1. Tarih istemci nesne son kullanıcının saat dilimiyle zaman. JSON.stringify(new Date()) otomatik olarak bir geçiş yapar.

    JSON Stringify changes time of date because of UTC

    Bu soru yardımcı biraz, ama biz sunucuya göndermeden önce tarih kaydırmaya hatırlamak gerekiyor. new Date('2012-10-19T10:23:47.778Z') 'u yaptıktan sonra bir vardiyaya ihtiyacımız olduğunu hatırlamamız gerekiyor. JSON'un tarihlerden haberdar olmadığını biliyoruz, ancak tarihleri ​​ayrıştıracak JSON.parse analoguna sahip olmak güzel olurdu.

  2. Biz Newton Json.net/serisi kaldırılmaya tarihleri ​​seri hale getirmek kullanmak, ancak DateTimeKind.Unspecified bunu yapar

Soru:

çalışmak için zarif bir yolu var mı hem sunucuda hem de istemcisindeki tarihler? Tüm uygulamada kesişen bir şey olarak buna ihtiyacımız var.

UPD:

daha açıkça koymak zorunda kaldı. Uygulamalarımızda, yalnızca tarihlerle çalıştığımızdan, müşteri saat dilimlerini hesaba katmamız gerekmez. Sunucu 2012-10-19T10:23:47.778Z' dönerse

Yani, biz Date nesnesini gerekir:

Fri Oct 19 2012 10:23:47 GMT+0300 (Kaliningrad Standard Time)

Değil

Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time)

+0

JSON.stringify', tarihi * ile * UTC arasında çevirmiyor mu? – James

+0

Bu sorunları kendim deneyimledikten sonra, bir adam bana aşağıdakileri sordu: "Nesnenin kendisinin gerçekten istemciye mi, yoksa sadece doğru gösterime mi ihtiyacı var?". Benim durumumda haklıydı ve doğru Kültür tarafından biçimlendirilen doğru tarihin dize gösterimini döndürmeye karar verdi. –

cevap

1

Muhtemelen en iyi yolu olarak bir zaman değerini göndermektir (Tarih kaydırılır) 1970-01-01T00: 00: 00Z'den (yani UTC) sonra milisaniye, o zaman sadece new Date(timeValue) yapabilir ve tarih nesneniz bu UTC saatine ayarlanmış demektir. İstemci sistemi saat dilimi ayarına bağlı olarak tarih ve saati döndürecektir.

örn.

alert(new Date(0)); // Thu Jan 01 1970 10:00:00 GMT+1000 (EST) 

Eğer istemci üzerinde bu tarihten nesne ile karışıklık (diyelim bir gün ekleyin) sadece zaman değerini geri gönderebilir: ikinci gelen ilk TIMEVALUE çıkart

var timeValue = 1350518400000; // 2012-20-18T00:00:00Z 
var date = new Date(timeValue); 
alert(date);     // 2012-10-18T10:00:00UTC+1000 

// add a day 
date.setDate(date.getDate() + 1); 
alert(date.getTime());   // 1350604800000 

ve benim için Bir gün içinde milisaniye olan 86400000 elde edersiniz (eğer gün, gün ışığından yararlanan bir değişim sınırını geçerse her iki saat de bir saat olacak). Şiddetinde zaman değeriyle istediğiniz şeyi yapın, bir sayı olarak saklayın veya bir tarih dizesine dönüştürün.

+0

One gotcha, .NET DateTime çağrısıdır ve keneler JavaScript'lerden farklıdır. https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspx ve http://stackoverflow.com/questions/7966559/how-to-convert-javascript -date-nesne-keneler – Jasen

İlgili konular