Как мне найти первый и последний день следующего месяца? - PullRequest
0 голосов
/ 25 января 2019

Если у меня есть заданная дата, как мне найти первый и последний дни следующего месяца?

Например,

today <- as.Date("2009-04-04")

Я хочу найти

# first date in next month
"2009-05-01"  

# last date in next month
"2009-05-31"

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Вы можете сделать это с помощью базы R:

today <- as.Date("2009-04-04")

first <- function(x) {
  x <- as.POSIXlt(x)
  x$mon[] <- x$mon + 1
  x$mday[] <- 1
  x$isdst[] <- -1L
  as.Date(x)
}

first(today)
#[1] "2009-05-01"

first(first(today)) - 1
#[1] "2009-05-31"
0 голосов
/ 25 января 2019

Вот несколько решений.Мы используем today из вопроса для проверки.В обоих случаях входом может быть вектор класса Date.

1) Base R Определить функцию fom, чтобы задать первое число месяца для аргумента Date.Используя это, мы можем получить дату первого и последнего числа следующего месяца следующим образом.Мы используем факты о том, что 31 и 62 дня после первого месяца обязательно являются датой в следующем месяце и месяцем после следующего месяца.

fom <- function(x) as.Date(cut(x, "month"))

fom(fom(today) + 31)
## [1] "2009-05-01"

fom(fom(today) + 62) - 1
## [1] "2009-05-31"

2) yearmon yearmon объекты класса внутренне представляют год и месяц как год плюс 0 для января, 1/12 для февраля, 2/12 для марта и так далее.Использование as.Date.yearmon аргумента frac указывает долю пути через месяц для вывода.По умолчанию используется значение frac = 0, в результате чего выводится первое число месяца, а frac = 1 означает конец месяца.

library(zoo)

as.Date(as.yearmon(today) + 1/12)
## [1] "2009-05-01"

as.Date(as.yearmon(today) + 1/12, frac = 1)
## [1] "2009-05-31"
0 голосов
/ 25 января 2019

lubridate имеет несколько полезных инструментов для этой цели.

library(lubridate)

today <- ymd("2009-04-12")

# First day of next month
first <- ceiling_date(today, unit = "month")
# Last day of next month
last <- ceiling_date(first, unit= "month") -1


first
#"2009-05-01"

last
#"2009-05-31"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...