+stamp_t get_time(date_t *date)
+{
+ return mktime(&(struct tm){
+ .tm_year = date->year-1900,
+ .tm_mon = date->month,
+ .tm_mday = date->day+1,
+ .tm_hour = date->hour,
+ .tm_min = date->min});
+}
+
+int get_mins(date_t *start, date_t *end)
+{
+ return (get_time(end)-get_time(start))/60;
+}
+
+int compare(date_t *a, date_t *b)
+{
+ int rval = a->year < b->year ? -1 : a->year > b->year ? 1 :
+ a->month < b->month ? -1 : a->month > b->month ? 1 :
+ a->day < b->day ? -1 : a->day > b->day ? 1 :
+ a->hour < b->hour ? -1 : a->hour > b->hour ? 1 :
+ a->min < b->min ? -1 : a->min > b->min ? 1 : 0;
+ return rval;
+}
+
+int before(date_t *start, int year, int month, int day, int hour, int min)
+{
+ return compare(start, &(date_t){year, month, day, hour, min}) < 0;
+}
+
+int all_day(date_t *start, date_t *end)
+{
+ date_t test = *start;
+ add_days(&test.year, &test.month, &test.day, 1);
+ return compare(&test, end) <= 0;
+}
+
+int no_date(date_t *date)
+{
+ return date->year == 0;
+}
+