I came across a similar issue, unfortunately, you can't specify something similar to CRON action in RN.
My solution to that problem is to use this library https://github.com/ocetnik/react-native-background-timer and calculate the difference between current time and time that the task is scheduled for.
The calculated time should be in ms, so you can use it with provided function setTimeout
:
// Start a timer that runs once after X milliseconds
const timeoutId = BackgroundTimer.setTimeout(() => {
// this will be executed once after 10 seconds
// even when app is the the background
console.log('tac');
}, 10000);
Example:
Let's say you want to schedule task for tomorrow at 16th, in componentDidMount
you can calculate time between now and scheduled date. Let's use moment
for that:
componentDidMount(){
const scheduledDate =
moment().add(1,'d').set({hour:16,minute:0,second:0,millisecond:0})
const diffTime = scheduledDate.diff(moment())
this.timeoutId = BackgroundTimer.setTimeout(() => {
console.log('tac');
}, diffTime);
}
componentWillUnmount(){
BackgroundTimer.clearTimeout(this.timeoutId);
}
Note that this solution is vulnerable to a user changing the time on his phone. The perfect solution would be to use some external service to fetch time.
Second note, the app needs to be at least in the background for this to work.