我有一个非常直接的问题,我似乎无法弄清楚。我使用AngularJS和Firebase作为后端。每天更换一次通话功能
基本上,我有一个函数,我想运行一次,每天,在午夜为了做一个值重置(设置一些对象属性为false等)。该功能工作正常,当我手动运行并按照预期工作。
但是,我似乎无法让它在日更改中自动运行。
我想在午夜运行的功能,每天一次是Fed.newDay()
。它通过Fed
工厂注入到我的Dte
工厂 - 这使为期一周的天更新的对象,月等
目前,我Dte
厂,我有以下对象:
var date = new Date();
var Dte = {
currentDate: function() {
ref.update({date: date.getDate()});
ref.on('child_changed', function(snapshot) {
console.log('Dte registered new Day');
Fed.newDay();
});
return date.getDate();
},
}
的这里的目标是在每次更改日期时运行一次Fed.newDay()
。我已经存储在火力地堡的日期如下: harrison -> date -> date: 23
我的假设是,每一个日期是在服务器上更新时间,该功能将运行基于火力地堡的ref.on('child_changed')...
方法。当我手动设置该值时,该功能按预期运行,但不会在自动更改日期过夜。
我也试过使用setInterval
和setTimeout
每86400000毫秒(1天)运行一次函数。不过,我不认为这些应用程序在运行时运行。
我必须在这里忽略一些东西。感谢您的时间和帮助。
更新:
只是为了澄清。
这就是我想要做的事:
我有两个复选框,标志着需要由一群人,用户可以完成的任务的完成。这两项任务只需要由任何一个用户完成一次,每天一次。在那一天结束后,我想清除它们的值(将它们设置为false),以便同一个人或另一个人可以检查两个框中的任一个。
我没有运行服务器,我只使用Firebase。 Firebase具有我可以访问的价值,只要当天有人使用该应用程序,该值目前正在更新当月的某天。
解决方案:
感谢@bmceldowney的帮助。
这是我到达的解决方案。此外,请参阅下面的正确答案,以避免多个用户在11:59登录时可能出现的问题。
var Dte = {
currentDate: function() {
dateRef.update({date: date.getDate()});
return date.getDate();
},
setLastUpdated: function(day) {
dateRef.set({lastUpdated: day});
},
compareReset: function(last) {
var current = Dte.currentDate();
if (last !== current) {
Fed.newDay();
Dte.setLastUpdated(current);
} else {
console.log('no reset needed');
}
},
load: function() {
dateRef.on('value', function(snapshot) {
if (snapshot.val() != null) {
var data = snapshot.val();
var updateValue = data['lastUpdated'];
Dte.compareReset(updateValue);
} else {
Dte.load();
}
})
},
你想要午夜本地用户时间,还是午夜格林尼治标准时间? – TheSharpieOne 2014-09-23 18:09:06
午夜本地用户时间,GMT-6,CST。 – Himmel 2014-09-23 18:11:52
你说'setInterval'不是一个选项,因为当应用程序没有运行时它们不会运行。这对于在客户端上运行的任何解决方案都是一个问题。 – bmceldowney 2014-09-23 18:13:56