From 18d252f7c64b41f3fc6f53a30c6fc3d8fcdf3821 Mon Sep 17 00:00:00 2001 From: Danielle Navarro Date: Tue, 18 Jan 2022 11:29:33 +1100 Subject: [PATCH 1/2] adds binding --- r/R/dplyr-funcs-datetime.R | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/r/R/dplyr-funcs-datetime.R b/r/R/dplyr-funcs-datetime.R index 0ff42944c0f..15a38997e7c 100644 --- a/r/R/dplyr-funcs-datetime.R +++ b/r/R/dplyr-funcs-datetime.R @@ -134,4 +134,9 @@ register_bindings_datetime <- function() { inherits(x, "POSIXct") || (inherits(x, "Expression") && x$type_id() %in% Type[c("TIMESTAMP")]) }) + + register_binding("leap_year", function(date) { + year <- Expression$create("year", date) + (year %% 4 == 0) & ((year %% 100 != 0) | (year %% 400 == 0)) + }) } From bc1de4b0dbbf84723ca35fff27dd5fa5f390684e Mon Sep 17 00:00:00 2001 From: Danielle Navarro Date: Tue, 18 Jan 2022 11:29:43 +1100 Subject: [PATCH 2/2] adds tests --- r/tests/testthat/test-dplyr-funcs-datetime.R | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/r/tests/testthat/test-dplyr-funcs-datetime.R b/r/tests/testthat/test-dplyr-funcs-datetime.R index c3f79dc13ee..359a5403aca 100644 --- a/r/tests/testthat/test-dplyr-funcs-datetime.R +++ b/r/tests/testthat/test-dplyr-funcs-datetime.R @@ -634,3 +634,35 @@ test_that("extract yday from date", { test_df ) }) + +test_that("leap_year mirror lubridate", { + + compare_dplyr_binding( + .input %>% + mutate(x = leap_year(date)) %>% + collect(), + test_df + ) + + compare_dplyr_binding( + .input %>% + mutate(x = leap_year(datetime)) %>% + collect(), + test_df + ) + + compare_dplyr_binding( + .input %>% + mutate(x = leap_year(test_year)) %>% + collect(), + data.frame( + test_year = as.Date(c( + "1998-01-01", # not leap year + "1996-01-01", # leap year (divide by 4 rule) + "1900-01-01", # not leap year (divide by 100 rule) + "2000-01-01" # leap year (divide by 400 rule) + )) + ) + ) + +})