diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 7542745436dc94cc9bb31a74097199fa6ffca0bb..7eeddeb838a087e5d3781ae3706a82ffd48fb16f 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -163,6 +163,25 @@ static char	*months[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oc
 static const char * base64alphabet = 
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
+static DWORD monthdays[12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
+
+static time_t time_gm( struct tm* ti )  {
+	time_t t;
+
+	t=(ti->tm_year-70)*365;
+	t+=(ti->tm_year-69)/4;
+	t+=monthdays[ti->tm_mon];
+	if(ti->tm_mon >= 2 && ti->tm_year+1900%400 ? (ti->tm_year+1900%100 ? (ti->tm_year+1900%4 ? 0:1):0):1)
+		++t;
+	t += ti->tm_mday - 1;
+	t = t * 24 + ti->tm_hour;
+	t = t * 60 + ti->tm_min;
+	t = t * 60 + ti->tm_sec;
+
+	return t;
+}
+
+
 static int lprintf(char *fmt, ...)
 {
 	va_list argptr;
@@ -403,7 +422,7 @@ static time_t decode_date(char *date)
 			ti.tm_year -= 1900;
 	}
 
-	t=mktime(&ti);
+	t=time_gm(&ti);
 	lprintf("Parsed date as: %d",t);
 	return(t);
 }