summaryrefslogtreecommitdiff
path: root/firmware/common/timefuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common/timefuncs.c')
-rw-r--r--firmware/common/timefuncs.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/firmware/common/timefuncs.c b/firmware/common/timefuncs.c
index 6fdc0b7240..f5097c8e52 100644
--- a/firmware/common/timefuncs.c
+++ b/firmware/common/timefuncs.c
@@ -193,3 +193,42 @@ time_t mktime(struct tm *t)
193 return(result); 193 return(result);
194} 194}
195#endif 195#endif
196
197int day_of_week(int m, int d, int y)
198{
199 char mo[12] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
200
201 if(m == 0 || m == 1) y--;
202 return (d + mo[m] + y + y/4 - y/100 + y/400) % 7;
203}
204
205void yearday_to_daymonth(int yd, int y, int *d, int *m)
206{
207 short t[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
208 int i;
209
210 if((y%4 == 0 && y%100 != 0) || y%400 == 0)
211 {
212 for(i=1;i<12;i++)
213 t[i]++;
214 }
215
216 yd++;
217 if(yd <= 31)
218 {
219 *d = yd;
220 *m = 0;
221 }
222 else
223 {
224 for(i=1;i<12;i++)
225 {
226 if(yd <= t[i])
227 {
228 *d = yd - t[i-1];
229 *m = i;
230 break;
231 }
232 }
233 }
234}