I have never used the xts() function, so treat my advice with care.
The documentation of the xts() function shows the following
xts(x = NULL,
order.by = index(x),
frequency = NULL,
unique = TRUE,
tzone = Sys.getenv("TZ"),
...)
The order.by argument is described as "a corresponding vector of unique times/dates".
One thing you have tried is
xts_price <- xts(price$crypto, price$price, price$date)
That assigns price$price to the order.by argument and since price$price is not a "vector of unique times/dates", you get the error that "order.by requires an appropriate time-based object".
Your second attempt is
xts_price2 <- xts(select(price,-c("crypto","date")),
order.by = as.POSIXct(strptime(price$date,"%Y-%m-%d")))
where you are trying to transform price$date. But price$date is already a Date object and does not need to be transformed. My guess - remember I have never used this function - is
xts_price2 <- xts(x = price$price, order.by = price$date)