diff --git a/r/R/dplyr-funcs-datetime.R b/r/R/dplyr-funcs-datetime.R index 15a38997e7c..04c0214fdfb 100644 --- a/r/R/dplyr-funcs-datetime.R +++ b/r/R/dplyr-funcs-datetime.R @@ -139,4 +139,13 @@ register_bindings_datetime <- function() { year <- Expression$create("year", date) (year %% 4 == 0) & ((year %% 100 != 0) | (year %% 400 == 0)) }) + + register_binding("am", function(x) { + hour <- Expression$create("hour", x) + hour < 12 + }) + register_binding("pm", function(x) { + !call_binding("am", x) + }) + } diff --git a/r/tests/testthat/test-dplyr-funcs-datetime.R b/r/tests/testthat/test-dplyr-funcs-datetime.R index 228eca56add..a7a705678c1 100644 --- a/r/tests/testthat/test-dplyr-funcs-datetime.R +++ b/r/tests/testthat/test-dplyr-funcs-datetime.R @@ -684,3 +684,30 @@ test_that("leap_year mirror lubridate", { ) }) + +test_that("am/pm mirror lubridate", { + + # https://issues.apache.org/jira/browse/ARROW-13168 + skip_on_os("windows") + + compare_dplyr_binding( + .input %>% + mutate( + am = am(test_time), + pm = pm(test_time) + ) %>% + collect(), + data.frame( + test_time = strptime( + x = c( + "2022-01-25 11:50:59", + "2022-01-25 12:00:00", + "2022-01-25 00:00:00" + ), + format = "%Y-%m-%d %H:%M:%S" + ) + + ) + ) + +})