diff -S ftp.c -ru wget-1.12.orig/src/ftp.c wget-1.12/src/ftp.c
--- wget-1.12.orig/src/ftp.c	2009-09-22 04:59:21.000000000 +0200
+++ wget-1.12/src/ftp.c	2010-08-13 17:00:37.000000000 +0200
@@ -1705,12 +1705,21 @@
       if (opt.timestamping && f->type == FT_PLAINFILE)
         {
           struct_stat st;
+	  /* Do now download if time of file is outside wanted range */
+	  if (f->tstamp != -1
+	      && ((opt.newer_than && f->tstamp <= opt.newer_than)
+		  || (opt.older_than && f->tstamp >= opt.older_than)))
+	    {
+	      logprintf (LOG_VERBOSE, _("\
+Remote file %s not in wanted time range -- not retrieving.\n"), quote (f->name));
+	      dlthis = false;
+	    }
           /* If conversion of HTML files retrieved via FTP is ever implemented,
              we'll need to stat() <file>.orig here when -K has been specified.
              I'm not implementing it now since files on an FTP server are much
              more likely than files on an HTTP server to legitimately have a
              .orig suffix. */
-          if (!stat (con->target, &st))
+          if (dlthis && !stat (con->target, &st))
             {
               bool eq_size;
               bool cor_val;
@@ -1749,7 +1758,7 @@
 The sizes do not match (local %s) -- retrieving.\n\n"),
                              number_to_static_string (local_size));
                 }
-            }
+            }       /* !stat() */
         }       /* opt.timestamping && f->type == FT_PLAINFILE */
       switch (f->type)
         {
diff -S ftp.c -ru wget-1.12.orig/src/http.c wget-1.12/src/http.c
--- wget-1.12.orig/src/http.c	2009-09-22 05:02:18.000000000 +0200
+++ wget-1.12/src/http.c	2010-08-16 10:53:41.000000000 +0200
@@ -2706,6 +2706,19 @@
               /* The time-stamping section.  */
               if (opt.timestamping)
                 {
+		  /* Do now download if time of file is outside wanted range */
+		  if (hstat.remote_time && tmr != (time_t) (-1))
+		    {
+		      if ((opt.newer_than && (tmr <= opt.newer_than))
+			  || (opt.older_than && (tmr >= opt.older_than)))
+			{
+			  logprintf (LOG_VERBOSE, _("\
+Server file %s not in wanted time range -- not retrieving.\n\n"),
+				     quote (hstat.local_file));
+			  ret = RETROK;
+			  goto exit;
+			}
+		    }
                   if (hstat.orig_file_name) /* Perform the following
                                                checks only if the file
                                                we're supposed to
diff -S ftp.c -ru wget-1.12.orig/src/init.c wget-1.12/src/init.c
--- wget-1.12.orig/src/init.c	2009-09-22 05:02:41.000000000 +0200
+++ wget-1.12/src/init.c	2010-08-13 16:44:56.000000000 +0200
@@ -75,6 +75,7 @@
 CMD_DECLARE (cmd_file);
 CMD_DECLARE (cmd_directory);
 CMD_DECLARE (cmd_time);
+CMD_DECLARE (cmd_date);
 CMD_DECLARE (cmd_vector);
 
 CMD_DECLARE (cmd_spec_dirstruct);
@@ -191,10 +192,12 @@
   { "maxredirect",      &opt.max_redirect,      cmd_number },
   { "mirror",           NULL,                   cmd_spec_mirror },
   { "netrc",            &opt.netrc,             cmd_boolean },
+  { "newerthan",        &opt.newer_than,        cmd_date },
   { "noclobber",        &opt.noclobber,         cmd_boolean },
   { "noparent",         &opt.no_parent,         cmd_boolean },
   { "noproxy",          &opt.no_proxy,          cmd_vector },
   { "numtries",         &opt.ntry,              cmd_number_inf },/* deprecated*/
+  { "olderthan",        &opt.older_than,        cmd_date },
   { "outputdocument",   &opt.output_document,   cmd_file },
   { "pagerequisites",   &opt.page_requisites,   cmd_boolean },
   { "passiveftp",       &opt.ftp_pasv,          cmd_boolean },
@@ -1128,6 +1131,33 @@
   return true;
 }
 
+/* Store the value of VAL to *OUT.  The value is a date as understood
+   by get_date().  */
+
+static bool
+cmd_date (const char *com, const char *val, void *place)
+{
+  static struct timespec current_time;
+  struct timespec result;
+  int ok;
+
+  /* Cache current time so all relative times get same epoch */
+  if (!current_time.tv_sec)
+    {
+      gettime (&current_time);
+    }
+
+  ok = get_date (&result, val, &current_time);
+  if (!ok)
+    {
+      fprintf (stderr, _("%s: %s: Invalid value %s.\n"), exec_name, com, quote (val));
+      return false;
+    }
+
+  *(time_t *)place = result.tv_sec;
+  return true;
+}
+
 #ifdef HAVE_SSL
 static bool
 cmd_cert_type (const char *com, const char *val, void *place)
diff -S ftp.c -ru wget-1.12.orig/src/main.c wget-1.12/src/main.c
--- wget-1.12.orig/src/main.c	2009-09-22 05:03:11.000000000 +0200
+++ wget-1.12/src/main.c	2010-08-16 11:23:10.000000000 +0200
@@ -220,9 +220,11 @@
     { "local-encoding", 0, OPT_VALUE, "localencoding", -1 },
     { "max-redirect", 0, OPT_VALUE, "maxredirect", -1 },
     { "mirror", 'm', OPT_BOOLEAN, "mirror", -1 },
+    { "newer-than", 0, OPT_VALUE, "newerthan", -1 },
     { "no", 'n', OPT__NO, NULL, required_argument },
     { "no-clobber", 0, OPT_BOOLEAN, "noclobber", -1 },
     { "no-parent", 0, OPT_BOOLEAN, "noparent", -1 },
+    { "older-than", 0, OPT_VALUE, "olderthan", -1 },
     { "output-document", 'O', OPT_VALUE, "outputdocument", -1 },
     { "output-file", 'o', OPT_VALUE, "logfile", -1 },
     { "page-requisites", 'p', OPT_BOOLEAN, "pagerequisites", -1 },
@@ -457,6 +459,17 @@
   -N,  --timestamping            don't re-retrieve files unless newer than\n\
                                  local.\n"),
     N_("\
+       --newer-than=TIME         don't retrieve files unless newer than this\n\
+                                 time.  TIME is a date-time as understood by\n\
+                                 GNU get_date().  One supported format is the\n\
+                                 ISO date-time, \"yyyy-mm-ddThh:mm:ss\".  Relative\n\
+                                 times use current time as their epoch, so\n\
+                                 \"- 1 month\" will work as expected.\n"),
+    N_("\
+       --older-than=TIME         don't retrieve files unless older than this\n\
+                                 time.  See --newer-than for description\n\
+                                 of TIME.\n"),
+    N_("\
   -S,  --server-response         print server response.\n"),
     N_("\
        --spider                  don't download anything.\n"),
@@ -1040,6 +1053,13 @@
       print_usage ();
       exit (1);
     }
+  if (!opt.timestamping && (opt.newer_than || opt.older_than))
+    {
+      printf (_("Must specify --timestamping if using --newer-than or\
+ --older-than.\n"));
+      print_usage ();
+      exit (1);
+    }
 #ifdef ENABLE_IPV6
   if (opt.ipv4_only && opt.ipv6_only)
     {
diff -S ftp.c -ru wget-1.12.orig/src/options.h wget-1.12/src/options.h
--- wget-1.12.orig/src/options.h	2009-09-22 05:03:47.000000000 +0200
+++ wget-1.12/src/options.h	2010-08-13 16:30:40.000000000 +0200
@@ -137,6 +137,8 @@
 #endif
 
   bool timestamping;		/* Whether to use time-stamping. */
+  time_t newer_than;
+  time_t older_than;
 
   bool backup_converted;	/* Do we save pre-converted files as *.orig? */
   bool backups;			/* Are numeric backups made? */
diff -ru wget-1.12.orig/doc/wget.info wget-1.12/doc/wget.info
--- wget-1.12.orig/doc/wget.info	2009-09-22 18:30:20.000000000 +0200
+++ wget-1.12/doc/wget.info	2010-08-16 11:23:36.000000000 +0200
@@ -581,6 +581,17 @@
 `--timestamping'
      Turn on time-stamping.  *Note Time-Stamping::, for details.
 
+`--newer-than=TIME'
+     Only download files newer than TIME.  TIME is a date-time as
+     understood by GNU get_date().  One supported format is the
+     ISO date-time, "yyyy-mm-ddThh:mm:ss".  Relative times use
+     current time as their epoch, so "- 1 month" will work as
+     expected.
+
+`--older-than=TIME'
+     Only download files older than TIME.  See --newer-than for
+     description of TIME.
+
 `-S'
 `--server-response'
      Print the headers sent by HTTP servers and responses sent by FTP
diff -ru wget-1.12.orig/doc/wget.texi wget-1.12/doc/wget.texi
--- wget-1.12.orig/doc/wget.texi	2009-09-04 23:22:04.000000000 +0200
+++ wget-1.12/doc/wget.texi	2010-08-16 11:23:33.000000000 +0200
@@ -719,6 +719,16 @@
 @itemx --timestamping
 Turn on time-stamping.  @xref{Time-Stamping}, for details.
 
+@itemx --newer-then=TIME
+Only download files newer than TIME.  TIME is a date-time as
+understood by GNU get_date().  One supported format is the ISO
+date-time, ``yyyy-mm-ddThh:mm:ss''.  Relative times use current time as
+their epoch, so ``- 1 month'' will work as expected.
+
+@itemx --newer-then=TIME
+Only download files older than TIME.  See --newer-than for description
+of TIME.
+
 @cindex server response, print
 @item -S
 @itemx --server-response
