--- date.js	2009-03-20 16:57:29.000000000 -0500
+++ date_new.js	2009-03-20 16:44:47.000000000 -0500
@@ -36,7 +36,7 @@
 
   var find_time = function (norm) {
     var obj = {date:norm, time:''};
-    obj.time = norm.replace(/^.*-(\d\d?(:\d\d){1,2}(-(AM|PM))?)-.*$/, '$1');
+    obj.time = norm.replace(/^.*-(\d\d?(:\d\d){1,2}(:\d\d\d)?(-(AM|PM))?)-.*$/, '$1');
     if (obj.time == obj.date)
       obj.time = norm.replace(/^.*-(\d\d?-(AM|PM))-.*$/, '$1');
     if (obj.time == obj.date) obj.time = '';
@@ -97,19 +97,20 @@
   };
 
   var create_absolute = function (obj) {
-    
     var time = obj.time.replace(/[-APM]/g, '');
     var parts = time.split(':');
     parts[1] = parts[1] || 0;
-    parts[2] = parts[2] || 0;
+    parts[2] = parts[2] || 0;    
+    parts[3] = parts[3] || 0;
     var ihr = parseInt(parts[0], 10);
     if (obj.time.match(/-AM-/) && ihr == 12) parts[0] = 0;
     else if (obj.time.match(/-PM-/) && ihr < 12) parts[0] = ihr + 12;
     parts[0] = ("0" + parts[0]).substring(("0" + parts[0]).length - 2);
     parts[1] = ("0" + parts[1]).substring(("0" + parts[1]).length - 2);
     parts[2] = ("0" + parts[2]).substring(("0" + parts[2]).length - 2);
-    time = parts.join(':');
-
+    time = parts[0]+":"+parts[1]+":"+parts[2];
+	var	millisecs = parts[3];
+	
     var strict = defaults.opts.strict;
     if (!obj.year && !strict) obj.year = (new Date()).getFullYear();
     var year = parseInt(obj.year, 10);
@@ -129,6 +130,7 @@
 
     var date = new Date();
     date.setTime(Date.parse(year + '/' + month + '/' + day + ' ' + time));
+    date.setMilliseconds(millisecs);
     return date;
   };
 
