 <p>The package <code>lubridate</code> seems to handle "negative" years ok, although it does create a year <code>0</code>, which from the above comments seems to be inaccurate. Try:</p> <pre><code>library(lubridate) start &lt;- -10000 stop &lt;- 2013 myrange &lt;- NULL for (x in start:stop) { myrange &lt;- c(myrange,ymd(paste0(x,'-01-01'))) } </code></pre>