2011-03-26 107 views
2

我正在處理我的本地(PST)時區,並調用以UTC爲單位的Web服務。將我的JavaScript日期時間轉換爲來自PST的UTC

webservice以「2011-02-09T12:00:00」格式開始和結束日期,當前代碼使用starttime = 30天前,endtime = now。

下面的代碼:(?大概是因爲它把它在未來也許)

var s = new Date(); 
var e = new Date(); 

s.setTime(d.getTime() - 30 * 24 * 60 * 60 * 1000); 

var startdate = String.Format("datetime'{0:df(yyyy-MM-dd)}T{0:df(HH:mm:ss)}'", s); 
var enddate = String.Format("datetime'{0:df(yyyy-MM-dd)}T{0:df(HH:mm:ss)}'", e); 

var url = String.Format("http://foo.com/webservice.svc/data?start={1}&end={2}&$format=json", startdate, enddate); 
var obj = GetJsonObjectFromServer(url); 

我試着只是增加25200000毫秒到d和b但是這導致S是返回一個無效的日期。

因爲它使用的是PST,我的本地時區,因此我將這些參數傳遞到的web服務不會返回所有數據,因爲服務器處於UTC狀態,因此缺少8小時的時間範圍。

我已經嘗試了一堆UTC方法,但問題是將它恢復爲我需要的web服務的格式。我會感激更直接的指導,而不是指向JavaScript的UTC方法。

有一些簡單的我很想在這裏,並會愛的幫助!

回答

1

JavaScript有一個UTC日期方法,只是使用它。

<script type="text/javascript"> 

var d=Date.UTC(2005,7,8); 
document.write(d); 

</script> 

來源:http://www.w3schools.com/jsref/jsref_utc.asp

+0

你有更具體的說明嗎?我需要獲取當前日期,那麼你是否提出類似「var d = Date.UTC(foo.getYear(),foo.getMonth(),...)」來獲取當前日期參數並轉換爲UTC? – TMC 2011-03-27 00:23:49

+0

JavaScript有許多UTC日期方法:http://www.w3schools.com/jsref/jsref_obj_date.asp – BoltBait 2011-03-27 00:34:20

0

如果你通過日期爲Date對象,那麼Web服務應該處理的反序列化的日期/時間轉換。至少,這是如何與asp.net中的Web服務一起工作的。

儘管如此,從SQL Server返回的日期不是針對時區進行編碼的,並且必須在序列化之前設置區域,以便自動轉換到瀏覽器工作。

-1

結果表明,僅需增加7小時(毫秒)是最簡單的方法。即:

// get start date to be 30 days ago 
var foo = (30 * 24 * 60 * 60 * 1000); 
s.setTime(s.getTime() - foo + 25200000); 
e.setTime(e.getTime() + 25200000); 
+1

日光節約時間? – Andy 2011-08-16 16:29:07

0

我面臨類似的問題,希望同樣的描述會幫助你。 (不確定這是你的問題的根本原因)。

表達式「30 * 24 * 60 * 60 * 1000」實際上會計算爲整數,並且很多次會導致溢出。將它轉換爲長表達式解決了我的問題。換句話說,在上面的常量之一中加上「L」。 「30 * 24 * 60 * 60 * 1000L」。

相關問題