title: Converting `dttm` to `date` formatting with as.Date and as_date give different results in R
body: <p>I have a large data set with individual columns for event times and dates. I ended up creating a master <code>dttm</code> object with both the times and dates together, but have had trouble when I try to filter based on the date. Here is a sample data set that reflects my own: </p>
  
  <pre><code>library(tidyverse)
  
  d&lt;- structure(list(date = structure(c(1530921600, 1531008000, 
  1530403200, 1530489600, 1530576000, 1530489600, 1530576000, 1531008000, 
  1530921600, 1530662400, 1530748800, 1531180800, 1530748800, 1531526400, 
  1531526400, 1532044800, 1532131200, 1531180800, 1531353600, 1531353600
  ), class = c("POSIXct", "POSIXt"), tzone = "UTC"), date_time = structure(c(1531019100, 
  1531117500, 1530440640, 1530562440, 1530633240, 1530571920, 1530648900, 
  1531037100, 1531010460, 1530717240, 1530808200, 1531237020, 1530813000, 
  1531614060, 1531637640, 1532104320, 1532195220, 1531290120, 1531434300, 
  1531409280), class = c("POSIXct", "POSIXt"), tzone = "")), class = c("tbl_df", 
  "tbl", "data.frame"), row.names = c(NA, -20L))
  </code></pre>
  
  <p>Here is the how the data look:</p>
  
  <pre><code># A tibble: 20 x 2
     date                date_time  
     &lt;dttm&gt;              &lt;dttm&gt;             
   1 2018-07-07 00:00:00 2018-07-07 20:05:00
   2 2018-07-08 00:00:00 2018-07-08 23:25:00
   3 2018-07-01 00:00:00 2018-07-01 03:24:00
   4 2018-07-02 00:00:00 2018-07-02 13:14:00
   5 2018-07-03 00:00:00 2018-07-03 08:54:00
   6 2018-07-02 00:00:00 2018-07-02 15:52:00
   7 2018-07-03 00:00:00 2018-07-03 13:15:00
   8 2018-07-08 00:00:00 2018-07-08 01:05:00
   9 2018-07-07 00:00:00 2018-07-07 17:41:00
  10 2018-07-04 00:00:00 2018-07-04 08:14:00
  11 2018-07-05 00:00:00 2018-07-05 09:30:00
  12 2018-07-10 00:00:00 2018-07-10 08:37:00
  13 2018-07-05 00:00:00 2018-07-05 10:50:00
  14 2018-07-14 00:00:00 2018-07-14 17:21:00
  15 2018-07-14 00:00:00 2018-07-14 23:54:00
  16 2018-07-20 00:00:00 2018-07-20 09:32:00
  17 2018-07-21 00:00:00 2018-07-21 10:47:00
  18 2018-07-10 00:00:00 2018-07-10 23:22:00
  19 2018-07-12 00:00:00 2018-07-12 15:25:00
  20 2018-07-12 00:00:00 2018-07-12 08:28:00
  </code></pre>
  
  <p>You can see that all of the dates match across columns; the only difference is the presence of time information. But, when I convert both columns to the <code>date</code> class using <code>as.Date</code>...</p>
  
  <pre><code>d$date&lt;- as.Date(d$date)
  d$date_time&lt;- as.Date(d$date_time)
  
  # A tibble: 20 x 2
     date       date_time 
     &lt;date&gt;     &lt;date&gt;    
   1 2018-07-07 2018-07-08
   2 2018-07-08 2018-07-09
   3 2018-07-01 2018-07-01
   4 2018-07-02 2018-07-02
   5 2018-07-03 2018-07-03
   6 2018-07-02 2018-07-02
   7 2018-07-03 2018-07-03
   8 2018-07-08 2018-07-08
   9 2018-07-07 2018-07-08
  10 2018-07-04 2018-07-04
  11 2018-07-05 2018-07-05
  12 2018-07-10 2018-07-10
  13 2018-07-05 2018-07-05
  14 2018-07-14 2018-07-15
  15 2018-07-14 2018-07-15
  16 2018-07-20 2018-07-20
  17 2018-07-21 2018-07-21
  18 2018-07-10 2018-07-11
  19 2018-07-12 2018-07-12
  20 2018-07-12 2018-07-12
  </code></pre>
  
  <p>... several of the dates have been rounded up for the <code>date_time</code> column (rows 1, 2, 9, 14, 15, and 18). But, when I use <code>lubridate::as_date</code> to make the conversion...</p>
  
  <pre><code># A tibble: 20 x 2
     date       date_time 
     &lt;date&gt;     &lt;date&gt;    
   1 2018-07-07 2018-07-07
   2 2018-07-08 2018-07-08
   3 2018-07-01 2018-07-01
   4 2018-07-02 2018-07-02
   5 2018-07-03 2018-07-03
   6 2018-07-02 2018-07-02
   7 2018-07-03 2018-07-03
   8 2018-07-08 2018-07-08
   9 2018-07-07 2018-07-07
  10 2018-07-04 2018-07-04
  11 2018-07-05 2018-07-05
  12 2018-07-10 2018-07-10
  13 2018-07-05 2018-07-05
  14 2018-07-14 2018-07-14
  15 2018-07-14 2018-07-14
  16 2018-07-20 2018-07-20
  17 2018-07-21 2018-07-21
  18 2018-07-10 2018-07-10
  19 2018-07-12 2018-07-12
  20 2018-07-12 2018-07-12
  </code></pre>
  
  <p>... the dates match perfectly across columns. I've tried reading the documentation but I can't seem to figure out why <code>as.Date</code> is working differently than <code>lubridate::as_date</code>. In fact, <code>as.Date</code> seems to be producing incorrect conversions in several cases.</p>
  
  <p>Does anybody know what's going on?</p>