2011-04-01 67 views
0

我在客戶端的日期,我將這個日期到毫秒那裏,傳遞毫秒到服務器端代碼和轉換,要再次日期格式,但問題是在這個過程中,我的日期變化下面是我的方案問題從JavaScript轉換日期到服務器端

javascript日期:

var myDate= Fri Apr 01 2011 05:00:00 GMT+0530 (India Standard Time) {} 
    //Converted to milliseconds via this code (new Date(myDate)).getTime() 
    Output: 1301700600000 

現在我通過AJAX通過上面的字符串(1301700600000)到我的服務器端代碼。以下是服務器端代碼。

private void Test(string myDate) 
{ 
    long myDateMilliseconds=long.Parse(myDate); 
    var myDate = new DateTime(1970, 1, 1) + new TimeSpan(myDateMilliseconds*10000); 
    //Here the date becomes Date = {3/31/2011 12:00:00 AM} 
} 

即星期五2011年4月1日05:00:00 GMT + 0530不等於{2011/3/31 12:00:00 AM} 注意日期和時間差。

我可以知道如何有區別,我通過了日期,我在服務器上已經產生出日之間到來。

+0

您不應該依賴瀏覽器/客戶端提供的日期。充其量,這是不可靠的;最糟糕的..?它可以隨意操縱。 – JustinStolle 2011-04-01 03:57:25

+0

有關Unix類型時間戳的一般信息,請參見http://stackoverflow.com/questions/249760。你可能會缺少的是轉換到當地時間。考慮使用'.UtcNow'進行轉換並調整基線 – skarmats 2011-04-01 04:03:04

+0

@JustinStolle我想從客戶那裏得到約會,這就是爲什麼我需要幾毫秒的時間,否則我會面對格式問題。 – 2011-04-01 04:28:30

回答

1

如何從毫秒創建TimeSapn?呼叫TimeSpan.FromMilliseconds http://msdn.microsoft.com/en-us/library/system.timespan.frommilliseconds.aspx

注:考慮使用的功能UTC版本用於獲取日期和時間值。和閱讀時區...嘗試使用

var d = new Date(); 
var utcMs = d.UTC(); 

在客戶端

+0

我有代碼,你能告訴我我的代碼有什麼問題嗎? – 2011-04-01 04:04:20

0

看起來你在那裏失去了歲差。爲什麼不簡單地通過日期字符串和Parse它在服務器上。

+0

我有毫秒,你能告訴我怎樣才能將其轉換爲.NET日期.. – 2011-04-01 03:57:14

+0

烏姆只是要清楚,我試過這樣'長myDateMilliseconds = long.Parse(「1301700600000代碼「); var myDate = new DateTime(1970,1,1)+ new TimeSpan(myDateMilliseconds * 10000); myDate.Dump(); '我得到了正確的日期'01-四月-11 11:30:00 PM ' – 2011-04-01 04:05:22

+0

什麼是.Dump()..? – 2011-04-02 06:02:25

0

。然後使用

var utcThen = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(clientUtcMs); 

var localThen = utcThen.ToLocalTime(); 

更好的解決方案是計算UTC時間和客戶端本地時間之間的差異並將其發送到服務器。將其舍入到半小時(時區之間的時間間隔是否較小)?您將獲得相當準確的信息。

+0

@Rocky Singh:我的帖子中有一個錯誤。應該是'.UTC()'而不是'.getUTCMilliseconds()'。修正了 – skarmats 2011-04-01 05:00:34