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.
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"
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"
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.
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)
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