You can schedule a cloud code script to run at a specific target time (as shown in the example below, which will execute at 23:59 every day), instead of adding a certain amount of time to the script's execution time.
"use strict";
function main() {
var response = {}
bridge.logDebugJson("Script Inputs", data)
const scriptName = data.scriptName
const interval = data.args.interval
const searchSpan = interval < 60 ? 60 : 60 * 24
// schedule checking and re-schedule itself for the next week at 23:59 on the same day
var scriptProxy = bridge.getScriptServiceProxy()
var dateTimeSpanMinsFromNowInMillis = new Date().getTime() + (searchSpan * 60 * 1000)
var result = scriptProxy.getScheduledCloudScripts(dateTimeSpanMinsFromNowInMillis)
var nowTime = new Date().getTime()
if ((result.status == 200) && (result.data !== null)) {
for (var i = 0; i < result.data.scheduledJobs.length; i++) {
if (result.data.scheduledJobs[i].scriptName === scriptName && result.data.scheduledJobs[i].scheduledStartTime > nowTime) {
scriptProxy.cancelScheduledScript(result.data.scheduledJobs[i].jobId)
}
}
}
const targetHour = 23
const targetMinute = 59
const minutesDifference = getMinutesDifference(targetHour, targetMinute)
let minutesFromNow = minutesDifference + interval
bridge.logInfo(`minutesFromNow between the script calling time and the time of 23:59 on a same day${minutesFromNow}`)
response.scheduleJob = scriptProxy.scheduleRunScriptMinutes(scriptName, data, minutesFromNow)
// the code for your script
return response
}
function getMinutesDifference(targetHour, targetMinute) {
const now = new Date()
const targetTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), targetHour, targetMinute)
const differenceInMilliseconds = targetTime - now
bridge.logInfo(`differenceInMilliseconds between the script calling time and the target time: ${differenceInMilliseconds}`)
const differenceInMinutes = Math.floor(differenceInMilliseconds / (1000 * 60))
return differenceInMinutes
}
main()
The parameters for this script will be 1440 minutes,
{
"scriptName": "thisScriptNameItself",
"args": {
"interval": 1440
}
}