last_fit() does need an rsplit object but you can make such an object from two custom data frames with make_splits(). There is also initial_time_split() which makes a split that's aware of the temporal ordering of the data. The cutoff isn't a date but a proportion (unlike in your exact usecase) but it might be useful to be aware off.
library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#> method from
#> required_pkgs.model_spec parsnip
data(Chicago)
# split with temporal ordering
time_split <- initial_time_split(Chicago, prob = 0.75)
time_split
#> <Analysis/Assess/Total>
#> <4273/1425/5698>
chicago_train <- training(time_split)
chicago_test <- testing(time_split)
range(chicago_train$date)
#> [1] "2001-01-22" "2012-10-03"
range(chicago_test$date)
#> [1] "2012-10-04" "2016-08-28"
# use custom data frames to make split object
custom_split <- make_splits(chicago_train, assessment = chicago_test)
custom_split
#> <Analysis/Assess/Total>
#> <4273/1425/5698>