Working with Dates and Times Pt 2: Finding the Next Mothers Day with Simplicity

rtip
datetime
Author

Steven P. Sanderson II, MPH

Published

May 15, 2023

Introduction

Mother’s Day is a special occasion to honor and appreciate the incredible women in our lives. As programmers, we can use our coding skills to make our lives easier when it comes to important dates like Mother’s Day. In this blog post, we’ll walk through a simple and engaging R code that helps us find the next Mother’s Day. So grab your coding hats, and let’s get started!

# if you aren't using times, use the Date class; it's simpler
NextMothersDay <- as.Date(
  c(
    startMothersDay = "2024-05-14", 
    endMothersDay ="2024-05-14"
    )
  )

NextMothersDay
startMothersDay   endMothersDay 
   "2024-05-14"    "2024-05-14" 

In the first part of our code, we use the as.Date() function to find the next Mother’s Day. Since we don’t need to consider specific times, we can simply use the Date class, which simplifies the process. We create a vector with two elements: startMothersDay and endMothersDay, both set to “2024-05-14”. This represents the range of Mother’s Day for the year 2024. Finally, we store the result in the variable NextMothersDay and print it to the console. Voilà! We have the next Mother’s Day date.

# if you have times, then use POSIX.
NextMothersDay_ct <- as.POSIXct(
  c(
    startMothersDay = "2024-05-15 10:00", # Let Mommy Sleep!
    endMothersDay ="2024-05-15 23:59"
    ),
  tz = "GMT"
  )

NextMothersDay_ct
          startMothersDay             endMothersDay 
"2024-05-15 10:00:00 GMT" "2024-05-15 23:59:00 GMT" 

Now, let’s say we want to consider specific times for Mother’s Day celebrations. We can use the as.POSIXct() function to handle dates and times together. We create another vector with two elements: startMothersDay and endMothersDay, but this time with specific times. The start time is set to “2024-05-15 10:00” (because let’s let Mommy sleep in!) and the end time is set to “2024-05-15 23:59”. We also specify the time zone as “GMT” using the tz argument. The result is stored in the variable NextMothersDay_ct, and when we print it, we get the range of Mother’s Day with times included.

# converting from one POSIX to another is easy
NextMothersDay_lt <- as.POSIXlt(NextMothersDay_ct)
unclass(NextMothersDay_lt)
$sec
[1] 0 0

$min
[1]  0 59

$hour
[1] 10 23

$mday
[1] 15 15

$mon
[1] 4 4

$year
startMothersDay   endMothersDay 
            124             124 

$wday
[1] 3 3

$yday
[1] 135 135

$isdst
[1] 0 0

attr(,"tzone")
[1] "GMT"

Now, let’s explore how to convert a POSIXct object to a POSIXlt object. We use the as.POSIXlt() function to convert NextMothersDay_ct into a POSIXlt object. This conversion allows us to access more detailed components of the date and time, such as the day of the week, hour, minute, and second. Finally, we use the unclass() function to remove the class attributes from the object and print the result to the console.

Conclusion

With just a few lines of code, we have learned how to find the next Mother’s Day using R. Whether you need a simple date or a specific time range, R provides us with convenient functions to handle both scenarios. So the next time you want to plan a special surprise for your mom, you can rely on your coding skills to

Full Script

# if you aren't using times, use the Date class it's simpler
NextMothersDay <- as.Date(
  c(
    startMothersDay = "2024-05-14", 
    endMothersDay ="2024-05-14"
    )
  )

NextMothersDay

# if you have times, then use POSIX.
NextMothersDay_ct <- as.POSIXct(
  c(
    startMothersDay = "2024-05-15 10:00", # Let Mommy Sleep!
    endMothersDay ="2024-05-15 23:59"
    ),
  tz = "GMT"
  )

NextMothersDay_ct

# converting from one POSIX to another is easy
NextMothersDay_lt <- as.POSIXlt(NextMothersDay_ct)
unclass(NextMothersDay_lt)

Voila!