Obtenir la date de début et de fin du mois précédent à partir de la date courante dans R

y a-t-il un moyen facile d'obtenir la date de début et la date de fin du mois précédent à partir de la date courante dans R?

je n'ai que la date actuelle. De lui, je veux obtenir le mois précédent, date de début du mois précédent, date de fin du mois précédent.

currentDate<-Sys.Date() #return today's date as "2012-11-07"

je veux la date de début du mois précédent comme 2012-10-01 et la date de fin comme 2012-10-31 de la date d'aujourd'hui.

18
demandé sur Henrik 2012-11-07 15:15:40

5 réponses

un certain nombre de paquets ont des fonctions de date très pratiques, mais pour lancer les vôtres:

une fonction de début de mois:

som <- function(x) {
  as.Date(format(x, "%Y-%m-01"))
}

et un à la fin du mois de fonction (bien que vous n'aurez pas besoin de cela ici):

eom <- function(x) {
  som(som(x) + 35) - 1
}

Qui devrait vous aller. Par exemple, pour obtenir la fin du mois précédent:

som(Sys.Date()) - 1
[1] "2012-10-31"

et le début du mois:

som(som(Sys.Date()) - 1)
[1] "2012-10-01"
29
répondu seancarmody 2012-11-07 11:27:28

Vous pouvez utiliser la bibliothèque lubridate, qui est très bon à faire des opérations arithmétiques.

library(lubridate)

currentDate <-Sys.Date()
# end of previous month:
eopm <- currentDate - days(day(currentDate))
# [1] "2012-10-31"

# start of previous month:
sopm <- currentDate - days(day(currentDate))
sopm <- sopm - days(day(sopm) - 1)
# [1] "2012-10-01"
16
répondu J4y 2012-11-07 15:17:17

en utilisant lubridate c'est un morceau de gâteau:

library(lubridate)
floor_date(Sys.Date() - months(1), "month")

il y a beaucoup de bonnes bibliothèques dans R. On dirait que tout ce dont vous avez besoin est déjà créé.

UPDATED version:

library(lubridate)
floor_date(as.Date("2011-03-29"), "month") - months(1)

C'est corrigé pour fonctionner correctement avec le 29 mars.

13
répondu Nikita Hismatov 2016-09-07 10:51:03

une autre option avec le paquet lubridate est d'utiliser le restauration fonction qui, comme le dit la description, fait exactement cela.

annulation des modifications d'une date pour le dernier jour du mois précédent ou le premier jour du mois. Optionnellement, la nouvelle date peut conserver la même heure, minute, et seconde information.

library(lubridate)

currentDate <- Sys.Date()

end_last_month <- rollback(currentDate)

init_last_month <- rollback(end_last_month, roll_to_first = TRUE)
8
répondu Icaro Bombonato 2016-03-30 13:18:44

Date De Début Du Mois Précédent:

format(Sys.Date() - 30, '%Y-%m-01')

Fin Du Mois Précédent La Date:

as.Date(format(Sys.Date(), '%Y-%m-01')) - 1
2
répondu Nick Keramaris 2016-11-06 21:32:22