· 7 years ago · Jan 23, 2018, 12:24 PM
1/*
2 * JavaScript Pretty Date
3 * Copyright (c) 2008 John Resig (jquery.com)
4 * Licensed under the MIT license.
5 */
6
7// Takes an ISO time and returns a string representing how
8// long ago the date represents.
9function prettyDate(time) {
10 var date = time,
11 diff = (((new Date()).getTime() - date.getTime()) / 1000),
12 day_diff = Math.floor(diff / 86400);
13
14 if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
15 return;
16
17 return day_diff == 0 && (
18 diff < 60 && "just now" ||
19 diff < 120 && "1 minute ago" ||
20 diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
21 diff < 7200 && "1 hour ago" ||
22 diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
23 day_diff == 1 && "Yesterday" ||
24 day_diff < 7 && day_diff + " days ago" ||
25 day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
26}
27
28var byDay = function(doc) {
29 var date = Date.UTC(doc.created_at);
30 return { date: date};
31}
32
33var initialDoc = {
34 count: 0,
35 date: '',
36 post_ids: new Array()
37}
38
39var reduce = function(doc, prev) {
40 var prettyDate = function(time) {
41 var date = time,
42 diff = (((new Date()).getTime() - date.getTime()) / 1000),
43 day_diff = Math.floor(diff / 86400);
44
45 if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
46 return;
47
48 return day_diff == 0 && (
49 diff < 60 && "just now" ||
50 diff < 120 && "1 minute ago" ||
51 diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
52 diff < 7200 && "1 hour ago" ||
53 diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
54 day_diff == 1 && "Yesterday" ||
55 day_diff < 7 && day_diff + " days ago" ||
56 day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
57 };
58 prev.count += 1;
59 prev.date = prettyDate(doc.created_at);
60 prev.post_ids.push(doc._id);
61}
62
63db.events.group({
64 keyf: byDay,
65 initial: initialDoc,
66 reduce: reduce,
67 cond: {created_at: {"$gte": new Date(2010, 0)}},
68});