Read the statement by Michael Teeuw here.
[Coding] update time from every 1 second to scheduled time
-
@kent79 sadly there is no magic here… just grunt work…
you have to calculate the ms til 0:0:0
you can use the moment library (yes I know other folks its not the new library)
// Your moment var now = moment(); // now // Your moment at midnight var Midnight = now.clone().startOf('day'); // 00:00:00 today earlier // Difference in milliseconds var milliseconds_passed_already = now.diff(Midnight, 'milliseconds'); // since 00:00:00 then subtract var milliseconds_til_midnight_tonight = (24*60*60*1000)-milliseconds_passed_already
-
May be I explain it clearly.
I am developing a lunar calender module. As my above coding, it will connect to json server to get the lunar information ervery 1 second.
I would like to change it to connect server once on Everyday 00:00.
Since I am a beginner of coding, I don’t know how to do edit it. Please teach me. Thanks
-
updateLunarCal: function() { var url1 = "https://abc ...."; var self = this; fetch(url1) .then((resp) => resp.json()) .then(function(data) { // Here you get the data to modify as you please self.lunar = data.LunarDate; self.updateDom(); }) .catch(function(error) { // If there is any error you will catch them here }); setTimeout(function() { if (moment().hours() === 0 && moment().minutes() === 0 && moment().second() === 0) { self.updateLunarCal(); } else{ } }, 100);
I have revised as above code. Is it achieve my goal?
-
@kent79 well, it will work, BUT you make a check every 100 ms… so LOTS of wasted work… let the system work for you
fetchIt: function(self){ var url1 = "https://abc ...."; fetch(url1) .then((resp) => resp.json()) .then(function(data) { // Here you get the data to modify as you please self.lunar = data.LunarDate; self.updateDom(); }) .catch(function(error) { // If there is any error you will catch them here }); }, updateLunarCal: function() { let MS_in_day = 24*60*60*1000; let now = moment(); let MS_til_midnight = MS_in_day - (now.diff(now.clone().startOf('day'), 'milliseconds') // start a one time timer to end of day setTimeout((selft) =>{ //in one time timer(at 00:00:00), start interval for next start of day setInterval((selfi)=>{ // fetch data, once per day at 00:00:00 self.fetchIt(selfi) // use 'this' pointer passed to the interval routine },MS_in_day, selft) // pass 'this' pointer passed to us // fetch on the 1st start of day, one time self.fecthIt(selft) }, MS_til_midnight, this ); // pass 'this' to the timer routine // fetch data now, 1st time this.fetchIt(this); }
-
updateLunarCal: function() { let MS_in_day = 24*60*60*1000; let now = moment(); let MS_til_midnight = MS_in_day - (now.diff(now.clone().startOf('day'), 'milliseconds')); // start a one time timer to end of day setTimeout((selft) =>{ //in one time timer(at 00:00:00), start interval for next start of day setInterval((selfi)=>{ // fetch data, once per day at 00:00:00 selfi.fetchIt(selfi) // use 'this' pointer passed to the interval routine },MS_in_day, selft) // pass 'this' pointer passed to us // fetch on the 1st start of day, one time selft.fecthIt(selft) }, MS_til_midnight, this ); // pass 'this' to the timer routine // fetch data now, 1st time this.fetchIt(this); },
Thank you so much for your reply. I got error while running above function. There may be some syntax error. But I can’t fix it. Please help me again. Thanks
-
It seems OK now. I will test it on tonight and will share it to all later. Thank you so much.
-
@kent79 error, yeh, sorry, forgot to change the self?.fetchIt() to use the right self pointer… fixed now
-
@sdetweil said in [Coding] update time from every 1 second to scheduled time:
@kent79 error, yeh, sorry, forgot to change the self?.fetchIt() to use the right self pointer… fixed now
Would you like to tell me which line need to update since I don’t know how to do? I have tested the above code, no syntax error, but no working while on 00:00. Thanks
-
@kent79 I updated my prior post
-
Sorry, it still not working. I would like to share the module as below. Would you please help to fix it? Many thanks.