17 "title" :
"Relative Date-Time",
18 "description" :
"An offset from a Date-Time.",
22 "VuoList_VuoRelativeTime",
37 return json_object_get_double(js);
45 return json_object_new_double(value);
53 const char *after =
" after";
54 const char *before =
" before";
56 if (fabs(value) < 0.00001)
57 return strdup(
"no offset");
72 char *s =
VuoText_format(
"%d year%s", abs(years), abs(years) == 1 ?
"" :
"s");
79 char *s =
VuoText_format(
"%d month%s", abs(months), abs(months) == 1 ?
"" :
"s");
86 char *s =
VuoText_format(
"%d day%s", abs(days), abs(days) == 1 ?
"" :
"s");
93 char *s =
VuoText_format(
"%d hour%s", abs(hours), abs(hours) == 1 ?
"" :
"s");
100 char *s =
VuoText_format(
"%d minute%s", abs(minutes), abs(minutes) == 1 ?
"" :
"s");
107 char *s =
VuoText_format(
"%g second%s", fabs(seconds), fabs(seconds) == 1 ?
"" :
"s");
113 if (componentCount == 1)
117 value > 0 ? after : before);
121 else if (componentCount == 2)
126 value > 0 ? after : before);
132 VuoText componentsAndSeparators[componentCount*2];
133 for (
int i = 1; i <= componentCount; ++i)
136 if (i < componentCount)
137 componentsAndSeparators[(i-1)*2 + 1] = (i == componentCount - 1) ?
", and " :
", ";
139 componentsAndSeparators[componentCount*2 - 1] = value > 0 ? after : before;
154 return valueA == valueB;
162 return valueA < valueB;
172 return (((years * 365 + months * 30 + days) * 24 + hours) * 60 + minutes) * 60 + seconds;
197 *years = (
VuoInteger)relativeTime / yearLength;
198 relativeTime = fmod(relativeTime, yearLength);
201 *months = (
VuoInteger)relativeTime / monthLength;
202 relativeTime = fmod(relativeTime, monthLength);
206 relativeTime = fmod(relativeTime, dayLength);
209 *hours = (
VuoInteger)relativeTime / hourLength;
210 relativeTime = fmod(relativeTime, hourLength);
213 *minutes = (
VuoInteger)relativeTime / minuteLength;
216 *seconds = fmod(relativeTime, 60);