2012-08-07 87 views
13

我有一堆对象,每个对象都有一个时间戳,我想按日期分组到JSON对象中。最终的目标是这样的:Javascript日期 - 只设置日期,忽略时间?

myObject = { 
    "06/07/2012" : [ 
     { 
      "timestamp" : "07/06/2012 13:30", 
      ... 
     }, 
     { 
      "timestamp" : "07/06/2012 14:00", 
      ... 
     } 
    ], 
    "07/07/2012 [...] 
} 

要得到的日期,我测试的每个时间戳对象和使用:

var visitDate = new Date(parseInt(item.timestamp, 10)); 
visitDate.setHours(0); 
visitDate.setMinutes(0); 
visitDate.setSeconds(0); 

..then我使用作为存储JSON对象的名称。这看起来很混乱,我相信应该有一个更简单的做事方式。

意见/建议欢迎!

+0

我无法想象'新日期(parseInt(“07/06/2012 13:30”,10));'会工作。或者我错过了什么? – KooiInc 2012-08-07 14:24:03

+0

是的,你是对的 - 对不起,这是粘贴我的一些现有的代码,并没有证明阅读!当前的代码将时间戳存储为'从时代'格式的毫秒数,因此它在原始上下文中更有意义... – Paul 2012-08-07 14:29:17

+0

好吧,我明白了。 – KooiInc 2012-08-07 14:39:53

回答

23

.toDateString()怎么样?

或者,使用.getDate().getMonth().getYear()

在我看来,如果你想按日期分组,你只需要访问日期,而不是设置它。通过访问日期字段的一些设置方式,您可以比较它们并将它们组合在一起,不是吗?

检查了所有的乐趣日期的方法在这里:MDN Docs


编辑:如果您保持它作为一个日期对象,只是这样做:

var newDate = new Date(oldDate.toDateString()); 

日期的构造函数关于解析字符串非常聪明(尽管不是没有很多注意事项,但这应该工作得相当一致),所以采用旧的Date并将它打印到没有任何时间的日期将会产生与ori相同的效果ginal post。

+0

这可能是一个更明智的方式来做到这一点,我正在考虑把它作为一个Date对象,尽管它被存储为JSON文本我猜! 不使用'.toDateString()'的原始原因是不确定是否在该字段中有空格。不要假设那很重要 – Paul 2012-08-07 14:16:24

+1

注意:向下滚动一下找到* full *方法列表。 toString的很多变体,你的头会弹出。 – 2012-08-07 14:16:24

+0

ooh'.valueOf()' - 这也很有用!谢谢! – Paul 2012-08-07 14:19:05

7

如果你不介意创建一个额外的日期对象,你可以尝试:

var tempDate = new Date(parseInt(item.timestamp, 10)); 
var visitDate = new Date (tempDate.getUTCFullYear(), tempDate.getUTCMonth(), tempDate.getUTCDate()); 

我做的非常相似,获得当月的日期没有时间的东西。

+3

我认为它应该是getUTCDate。 getUTCDay返回星期几(0,6)。 getUTCDate返回月份的日期(1,31) – 2016-11-03 20:18:01