diff --git a/lib/rrule.js b/lib/rrule.js
index ed2689e..c9a8fc4 100644
--- a/lib/rrule.js
+++ b/lib/rrule.js
@@ -182,9 +182,9 @@ var dateutil = {
         });
     },
 
-    timeToUntilString: function(time) {
+    timeToUntilString: function(time, onlyDate) {
         var date = new Date(time);
-        var comp, comps = [
+        var compsUsed, comp, comps = [
             date.getUTCFullYear(),
             date.getUTCMonth() + 1,
             date.getUTCDate(),
@@ -194,7 +194,15 @@ var dateutil = {
             date.getUTCSeconds(),
             'Z'
         ];
-        for (var i = 0; i < comps.length; i++) {
+
+        compsUsed = comps.length;
+        if (onlyDate) {
+          compsUsed = 3;
+        }
+
+        comps = comps.slice(0, compsUsed);
+
+        for (var i = 0; i < compsUsed; i++) {
             comp = comps[i];
             if (!/[TZ]/.test(comp) && comp < 10) {
                 comps[i] = '0' + String(comp);
@@ -217,6 +225,10 @@ var dateutil = {
             bits[6] || 0,
             bits[7] || 0
         ));
+    },
+
+    hasOnlyDate: function(until) {
+        return (!/T/.test(until));
     }
 
 };
@@ -711,6 +723,7 @@ RRule.DEFAULT_OPTIONS = {
     wkst:        RRule.MO,
     count:      null,
     until:      null,
+    onlydate:    false,
     bysetpos:    null,
     bymonth:     null,
     bymonthday:  null,
@@ -734,11 +747,13 @@ RRule.fromText = function(text, language) {
 };
 
 RRule.optionsToString = function(options) {
-    var key, keys, defaultKeys, value, strValues, pairs = [];
+    var key, keys, defaultKeys, value, strValues, onlyDate, pairs = [];
 
     keys = Object.keys(options);
     defaultKeys = Object.keys(RRule.DEFAULT_OPTIONS);
 
+    onlyDate = options.onlydate;
+
     for (var i = 0; i < keys.length; i++) {
 
         if (!contains(defaultKeys, keys[i])) continue;
@@ -789,7 +804,11 @@ RRule.optionsToString = function(options) {
                 break;
             case'DTSTART':
             case'UNTIL':
-                value = dateutil.timeToUntilString(value);
+                value = dateutil.timeToUntilString(value, onlyDate);
+                break;
+            case 'ONLYDATE':
+                // onlydate is just a flag
+                continue;
                 break;
             default:
                 if (value instanceof Array) {
@@ -1448,9 +1467,11 @@ RRule.parseString = function(rfcString) {
                 break;
             case 'DTSTART':
                 options.dtstart = dateutil.untilStringToDate(value);
+                options.onlydate = dateutil.hasOnlyDate(value);
                 break;
             case 'UNTIL':
                 options.until = dateutil.untilStringToDate(value);
+                options.onlydate = dateutil.hasOnlyDate(value);
                 break;
             case 'BYEASTER':
                 options.byeaster = Number(value);
