Skip to content

Commit 7f93ef6

Browse files
review sefun/time
1 parent e983f11 commit 7f93ef6

2 files changed

Lines changed: 26 additions & 19 deletions

File tree

lib/secure/sefun/time.c

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
/**
44
* Converts a timestamp to time ago format.
5-
* Example: # years # months # weeks # days ago
5+
* Example: # years # months # weeks # days # hours # minutes ago
66
*
77
* @param timestamp the epoch time() to convert
8-
* @param granularity how many details to display
8+
* @param granularity how many details to display (defaults to 2)
99
* @returns time in human readable format
1010
*/
1111
varargs string time_ago (int timestamp, int granularity) {
@@ -26,6 +26,9 @@ varargs string time_ago (int timestamp, int granularity) {
2626
diff = diff - (Weeks * WEEK_IN_SECS);
2727
Days = diff / DAY_IN_SECS;
2828
diff = diff - (Days * DAY_IN_SECS);
29+
Hours = diff / HOUR_IN_SECS;
30+
diff = diff - (Hours * HOUR_IN_SECS);
31+
Minutes = diff / MINUTE_IN_SECS;
2932

3033
if (Years > 0) {
3134
msg += Years + " year" + (Years > 1 ? "s" : "");
@@ -35,41 +38,39 @@ varargs string time_ago (int timestamp, int granularity) {
3538
return msg + " ago";
3639
}
3740
if (Months > 0) {
38-
msg += (sizeof(msg)>0?" ":"") + Months + " month" + (Months > 1 ? "s" : "");
41+
msg += (sizeof(msg) > 0 ? " " : "") + Months + " month" + (Months > 1 ? "s" : "");
3942
matches ++;
4043
}
4144
if (granularity > 0 && matches >= granularity) {
4245
return msg + " ago";
4346
}
4447
if (Weeks > 0) {
45-
msg += (sizeof(msg)>0?" ":"") + Weeks + " week" + (Weeks > 1 ? "s" : "");
48+
msg += (sizeof(msg) > 0 ? " " : "") + Weeks + " week" + (Weeks > 1 ? "s" : "");
4649
matches ++;
4750
}
4851
if (granularity > 0 && matches >= granularity) {
4952
return msg + " ago";
5053
}
5154
if (Days > 0) {
52-
msg += (sizeof(msg)>0?" ":"") + Days + " day" + (Days > 1 ? "s" : "");
55+
msg += (sizeof(msg) > 0 ? " " : "") + Days + " day" + (Days > 1 ? "s" : "");
5356
matches ++;
5457
}
5558
if (granularity > 0 && matches >= granularity) {
5659
return msg + " ago";
5760
}
58-
59-
if (sizeof(msg) > 0) {
60-
return msg + " ago";
61-
}
62-
63-
Hours = diff / HOUR_IN_SECS;
64-
diff = diff - (Hours * HOUR_IN_SECS);
6561
if (Hours > 0) {
66-
return Hours + " hour" + (Hours > 1 ? "s" : "") + " ago";
62+
msg += (sizeof(msg) > 0 ? " " : "") + Hours + " hour" + (Hours > 1 ? "s" : "");
63+
matches ++;
64+
}
65+
if (granularity > 0 && matches >= granularity) {
66+
return msg + " ago";
6767
}
68-
69-
Minutes = diff / MINUTE_IN_SECS;
70-
diff = diff - (Minutes * MINUTE_IN_SECS);
7168
if (Minutes > 0) {
72-
return Minutes + " minute" + (Minutes > 1 ? "s" : "") + " ago";
69+
msg += (sizeof(msg) > 0 ? " " : "") + Minutes + " minute" + (Minutes > 1 ? "s" : "");
70+
matches ++;
71+
}
72+
if (sizeof(msg) > 0) {
73+
return msg + " ago";
7374
}
7475

7576
return "very recently";

lib/secure/sefun/time.test.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ void test_time_ago () {
5050

5151
// default granularity:
5252
assert_equal(testOb->time_ago($(now) - (1 * YEAR_IN_SECS) - (7 * MONTH_IN_SECS) - (2 * WEEK_IN_SECS) - (4 * DAY_IN_SECS) - (15 * HOUR_IN_SECS) - (42 * MINUTE_IN_SECS) - 29), "1 year 7 months ago"),
53-
// disable granularity:
54-
assert_equal(testOb->time_ago($(now) - (1 * YEAR_IN_SECS) - (7 * MONTH_IN_SECS) - (2 * WEEK_IN_SECS) - (4 * DAY_IN_SECS) - (15 * HOUR_IN_SECS) - (42 * MINUTE_IN_SECS) - 29, 0), "1 year 7 months 2 weeks 4 days ago"),
53+
// granularity=5 includes hours:
54+
assert_equal(testOb->time_ago($(now) - (1 * YEAR_IN_SECS) - (7 * MONTH_IN_SECS) - (2 * WEEK_IN_SECS) - (4 * DAY_IN_SECS) - (15 * HOUR_IN_SECS) - (42 * MINUTE_IN_SECS) - 29, 5), "1 year 7 months 2 weeks 4 days 15 hours ago"),
55+
// granularity=6 includes hours and minutes:
56+
assert_equal(testOb->time_ago($(now) - (1 * YEAR_IN_SECS) - (7 * MONTH_IN_SECS) - (2 * WEEK_IN_SECS) - (4 * DAY_IN_SECS) - (15 * HOUR_IN_SECS) - (42 * MINUTE_IN_SECS) - 29, 6), "1 year 7 months 2 weeks 4 days 15 hours 42 minutes ago"),
57+
// disable granularity - shows all units including hours and minutes:
58+
assert_equal(testOb->time_ago($(now) - (1 * YEAR_IN_SECS) - (7 * MONTH_IN_SECS) - (2 * WEEK_IN_SECS) - (4 * DAY_IN_SECS) - (15 * HOUR_IN_SECS) - (42 * MINUTE_IN_SECS) - 29, 0), "1 year 7 months 2 weeks 4 days 15 hours 42 minutes ago"),
59+
// day-level + hours with default granularity=2:
60+
assert_equal(testOb->time_ago($(now) - DAY_IN_SECS - HOUR_IN_SECS), "1 day 1 hour ago"),
5561
}) :));
5662
}
5763

0 commit comments

Comments
 (0)