2013-05-06 90 views
1

我想从服务器的JSON形式的日期时间转换为我可以在HighChart中使用,但我不断收到错误的一天。JSON的日期时间JavaScript的日期时间得到了我错误的日期

var json = {"lastMinute":"2013-05-06 15:46:00"}; // GMT 

var lastMinute = json.lastMinute; 
var a = lastMinute.split(' '); 
var d = a[0].split('-'); 
var t = a[1].split(':'); 
var date = new Date(d[0],d[1],d[2],t[0],t[1],t[2]); 

// NEED TO CONVERT TO LOCALTIME 

此输出:周四2013年6月6日15点46分00秒GMT-0700(PDT)

有人可以把我从我的痛苦,告诉我什么愚蠢的简单的事情我做错了吗?

+2

一个字:[moment.js(http://momentjs.com) – user2246674 2013-05-06 18:02:05

+0

我喜欢moment.js但我们目前正在开发KISS 。 – jbolanos 2013-05-06 18:14:16

+2

我使用了moment.js(和jQuery和..),因为我相信* [懒惰](http://c2.com/cgi/wiki?LazinessImpatienceHubris)(因此,KISS?)。 KISS的一部分是让其他人遇到(并解决)你面前的问题。我喜欢使用生成的API来抽象出问题。 – user2246674 2013-05-06 18:49:06

回答

1
在JS

,月从0开始,而不是1 ...

var json = {"lastMinute":"2013-05-06 15:46:00"}; // GMT 

var lastMinute = json.lastMinute; 
var a = lastMinute.split(' '); 
var d = a[0].split('-'); 
var t = a[1].split(':'); 
var date = new Date(d[0],d[1]-1,d[2],t[0],t[1],t[2]); 
+0

应该是'd [1] - 1'吗? – 2013-05-06 16:07:06

+0

doh!对我感谢,谢谢。更新。 – dandavis 2013-05-06 16:08:30

+0

该死 - 你完全正确,我知道这一点。看 - 我说这简直太愚蠢了。 – jbolanos 2013-05-06 16:13:04

0

您可以使用Datejs(https://code.google.com/p/datejs/wiki/APIDocumentation)库。这是非常有用的,你有梅托德parseExact:

Date.parseExact("10/15/2004", "M/d/yyyy"); 
+1

直到Date.js团队可以[得到](https://groups.google.com/forum/#!msg/datejs/U7W2DtwzMA8/jAx6IvwQZ2oJ)[他们](https://groups.google.com/forum/ #!msg/datejs/vTRd7yDX5Lg/lt5ajP9l3VgJ)[act](https://code.google.com/p/datejs/issues/list)[together](https://code.google.com/p/datejs/源/列表)并生成稳定版本,我不会推荐使用它。他们从2007年起仍然处于“Alpha-1”状态!改为尝试[moment.js](http://momentjs.com/)。 – 2013-05-06 16:39:44

+0

它非常稳定,两年内未更新。 ;)[link](https://groups.google.com/forum/?fromgroups#!topic/datejs/_teRG_D_Emg)但我同意你,他们必须删除alpha标签! – aorlando 2013-05-06 16:49:56

+1

我希望。他们有一些好点子。最后*代码*签到是在2008年11月。如果它对你有用 - 没问题,但是当作者自己没有信心把它称为稳定时,我不会将任何东西投入生产。另一方面,更为成熟的还有在线单元测试来证明它。 – 2013-05-06 16:53:32

0

对于在JavaScript解析和格式化日期最终,使用moment.js库。

您可以明确指出UTC,并且在低级浏览器中可以正常工作。

var m = moment.utc('2013-05-06 15:46:00'); 

这些数值看起来他们是在ISO8601格式(不T)。所以你应该确定只有上面的代码。但是,如果你想更加准确,你可以这样做:

var m = moment.utc('2013-05-06 15:46:00', 'YYYY-MM-DD HH:mm:ss'); 

我推荐你把它作为一个moment为尽可能长时间。他们的格式很棒。但是,如果你需要它回为一个JavaScript的日期,只是做:

var date = m.toDate(); 
+0

json中的日期时间来自数据库,该数据库会更新可用数据的最后一分钟(这是四舍五入的)。我的下一个新任务是使​​用getTimezoneOffset()将其从SERVER GMT转换为本地时间 - 这似乎仍然是一个小时。 – jbolanos 2013-05-06 17:03:27

+0

@jbolanos - 注意'getTimezoneOffset'是你可能期望的相反符号。也要注意夏时制的偏移差异。如果你还有一个小时的时间(有或没有使用momentjs),请更新你原来的问题或者打开一个新的问题,这样我们可以看到更多的细节。谢谢。 – 2013-05-06 17:50:33

+0

是的 - 我做了一个变量来设置DST的真或假(将手动)和一个如果添加60 getTimezoneOffset()如果是true。 – jbolanos 2013-05-06 18:11:00