The sort of data that you describe is ephemeral in nature, meaning that it ( status in your case) is transitory / short-term; and it is not recommended to have such data stored in a database. It is okay to have it as a part of your schema, but I wouldn't recommend updating the database, using a cron job.
What you could do instead is modify your middleware function tied to your API endpoint route, which serves the status information (along with other user information, of course) to calculate it for you and then send the response along.
Assume we have set that endpoint route to be handled by a middleware function called fetchUserData... among other things, this is how I would write it to send the status information.
exports.fetchUserData = function (req, res) {
User
.findById(req.body.userId)
...
.exec(function (err, user) {
...
// Logic for calculating whether "now" falls somewhere
// in between the user's "online" schedule
? user.status = 'online'
: user.status = 'offline'
res.json({ user: user })
})
}