我无意识地处理我的本地(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);
我已经尝试过向d和b添加25,200,000毫秒,但是这会导致s被作为无效日期返回(大概是因为它将来会把它放在哪里?)。
由于它正在使用PST,我的本地时区,我传递这些参数的网络服务并没有返回所有数据,因为它因为服务器是UTC而缺少8小时的跨度。
我尝试了一堆UTC方法,但问题是将其恢复为webservice所需的格式。我会感谢更直接的指导,而不仅仅是指向Javascript UTC方法。
这里有一些简单的东西,我很想帮忙!
答案 0 :(得分:1)
JavaScript有一个UTC日期方法,只需使用它。
<script type="text/javascript">
var d=Date.UTC(2005,7,8);
document.write(d);
</script>
答案 1 :(得分:0)
如果您将日期作为日期对象传递,则Web服务应处理反序列化时的日期/时间转换。这至少是它如何与asp.net中的Web服务一起使用。
但是,请注意另一方面,因为从SQL Server返回的日期不是针对时区编码的,并且必须在序列化之前设置区域以使自动转换工作到浏览器。答案 2 :(得分:0)
我遇到了类似的问题,希望同样的描述会对你有所帮助。 (不确定这是你的问题的根源)。
表达式“30 * 24 * 60 * 60 * 1000”实际上计算为整数,多次导致溢出。将它转换为长表达式为我解决了问题。换句话说,将“L”添加到上面的常量之一。 “30 * 24 * 60 * 60 * 1000L”。
答案 3 :(得分:-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);