2012-08-07 82 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