Javascript 使用firebase作为后端的移动应用程序的处理日期
我的问题不是针对firebase的,我认为一般都适用 在我的例子中,移动应用程序(一种混合应用程序)在印度运行,后端是使用nodejs的firebase。这是一个食品订购应用程序 当一个人点餐时,我们在移动应用程序中使用(new Date()).getTime()并将其作为点餐日期传递 每次下订单时,firebase触发器都会在JSON realtime DB对象中更新当天的总销售额。为了保存总销售额,我们使用一天的开始作为日期时间戳。使用以下公式计算:Javascript 使用firebase作为后端的移动应用程序的处理日期,javascript,date,datetime,Javascript,Date,Datetime,我的问题不是针对firebase的,我认为一般都适用 在我的例子中,移动应用程序(一种混合应用程序)在印度运行,后端是使用nodejs的firebase。这是一个食品订购应用程序 当一个人点餐时,我们在移动应用程序中使用(new Date()).getTime()并将其作为点餐日期传递 每次下订单时,firebase触发器都会在JSON realtime DB对象中更新当天的总销售额。为了保存总销售额,我们使用一天的开始作为日期时间戳。使用以下公式计算: var date = new Date
var date = new Date()
var ms = date.getTime();
var msPerDay = 86400 * 1000;
var timestamp = ms - (ms % msPerDay);
我认为整个事情已经一团糟,因为new Date()将在印度的移动应用程序和在美国北部运行的firebase服务器上同时给出不同的值
那么,在我的情况下,处理日期的做法是什么 执行new Date()
时,将使用表示当前UTC时间的时间值创建日期实例
对于时钟准确且时区设置正确的主机,无论主机在何处或其时区设置如何,在同一时刻创建的日期都将具有时间值。然而,在“物联网”时代,主机可能是大量设备中的任何一个,这些设备的时钟和设置可能不准确
因此,您真的不应该依赖于客户机的准确性,而应该使用服务器时间来处理重要的事情
当您这样做时:
var date = new Date()
var ms = date.getTime();
var msPerDay = 86400 * 1000;
var timestamp = ms - (ms % msPerDay);
您正在将时间设置为UTC日的开始时间。这相当于:
var timestamp = new Date().setUTCHours(0,0,0,0);
2018年11月2日,这将是:1541116800000
如果愿意,可以将其存储,但可能希望将其存储为人类可读的日期,在这种情况下:
var timestamp = new Date().toISOString().slice(0,10); // 2018-11-02 on 2 Nov 2018
可能适合,但通常建议使用完整字符串,因此:
var d = new Date();
d.setUTCHours(0,0,0,0);
var timestamp = d.toISOString(); // 2018-11-02T00:00:00Z on 2 Nov 2018
请注意,UTC日期与本地时区偏移期间的本地日期不同(因此,从午夜到印度当地时间05:30将显示昨天的日期)
console.log(
新日期(new Date().setUTCHours(0,0,0,0)).toISOString()
);代码>执行new Date()
时,将使用表示当前UTC时间的时间值创建日期实例
对于时钟准确且时区设置正确的主机,无论主机在何处或其时区设置如何,在同一时刻创建的日期都将具有时间值。然而,在“物联网”时代,主机可能是大量设备中的任何一个,这些设备的时钟和设置可能不准确
因此,您真的不应该依赖于客户机的准确性,而应该使用服务器时间来处理重要的事情
当您这样做时:
var date = new Date()
var ms = date.getTime();
var msPerDay = 86400 * 1000;
var timestamp = ms - (ms % msPerDay);
您正在将时间设置为UTC日的开始时间。这相当于:
var timestamp = new Date().setUTCHours(0,0,0,0);
2018年11月2日,这将是:1541116800000
如果愿意,可以将其存储,但可能希望将其存储为人类可读的日期,在这种情况下:
var timestamp = new Date().toISOString().slice(0,10); // 2018-11-02 on 2 Nov 2018
可能适合,但通常建议使用完整字符串,因此:
var d = new Date();
d.setUTCHours(0,0,0,0);
var timestamp = d.toISOString(); // 2018-11-02T00:00:00Z on 2 Nov 2018
请注意,UTC日期与本地时区偏移期间的本地日期不同(因此,从午夜到印度当地时间05:30将显示昨天的日期)
console.log(
新日期(new Date().setUTCHours(0,0,0,0)).toISOString()
);代码>“new Date()将在印度的移动应用程序和firebase server(在美国北部运行)上提供不同的值”,如果时钟同步,则不会同步。日期总是UTC。当您执行ms-(ms%msPerDay)
时,这相当于date.setUTCHours(0,0,0,0)
。如果偏移量为+0530,则date.toString()
将显示凌晨05:30,即UTC午夜时的当地时间。因此,您说我完全不需要担心,我在上面所做的是正确的吗?换句话说,当移动应用程序通过(new Date()).getTime()时,该值将与firebase在同一时间(new Date())执行的操作相同。getTime()?是的,前提是时钟准确(这当然不能保证)。“new Date()将在印度的移动应用程序和firebase服务器(在美国北部运行)上给出不同的值。”如果时钟同步,则不会同步。日期总是UTC。当您执行ms-(ms%msPerDay)
时,这相当于date.setUTCHours(0,0,0,0)
。如果偏移量为+0530,则date.toString()
将显示凌晨05:30,即UTC午夜时的当地时间。因此,您说我完全不需要担心,我在上面所做的是正确的吗?换句话说,当移动应用程序通过(new Date()).getTime()时,它的值将与firebase在同一时间(new Date()).getTime()的值相同。是的,前提是时钟是准确的(这当然不能保证)。好吧,假设我将它存储为(new Date())。现在,当我在客户端检索它时,getTime()应该是新的日期吗(存储在服务器上的时间戳)是否正常,或者这是否需要有所不同?同样,当我打印大于日期的date.getMonth()时,它打印的是11,而不是date.getUtcMonth()打印12.为什么UTC月份与本地月份在主机时区偏移期间会有所不同?对于正偏移的时区,从该月的第一天午夜开始,对于负偏移的时区,从该月的最后一天开始。在所有其他时间,该月都会相同。最大正偏移量为+14,因此在下午2点之后11月1日,UTC everywhere具有相同的UTC和本地月份,直到该月最后一天的最大负偏移量为-12,因此直到UTC 11月30日中午。因此,我应该在移动应用程序codeplz中使用get month或get UTC month,并在此日期提供建议。getUTCMonth()
will。如果不确切知道您在做什么以及如何使用日期,我无法告诉您使用哪种方法,这超出了StackOverflow这一部分的范围。好吧,假设我将其存储为(new Date())。getTime()现在在客户端检索时:是否应该使用新日期(存储在服务器上的时间戳)可以吗?或者这需要不同吗?当我在date.getM上面打印时也是如此