Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用firebase作为后端的移动应用程序的处理日期_Javascript_Date_Datetime - Fatal编程技术网

Javascript 使用firebase作为后端的移动应用程序的处理日期

Javascript 使用firebase作为后端的移动应用程序的处理日期,javascript,date,datetime,Javascript,Date,Datetime,我的问题不是针对firebase的,我认为一般都适用 在我的例子中,移动应用程序(一种混合应用程序)在印度运行,后端是使用nodejs的firebase。这是一个食品订购应用程序 当一个人点餐时,我们在移动应用程序中使用(new Date()).getTime()并将其作为点餐日期传递 每次下订单时,firebase触发器都会在JSON realtime DB对象中更新当天的总销售额。为了保存总销售额,我们使用一天的开始作为日期时间戳。使用以下公式计算: var date = new Date

我的问题不是针对firebase的,我认为一般都适用

在我的例子中,移动应用程序(一种混合应用程序)在印度运行,后端是使用nodejs的firebase。这是一个食品订购应用程序

当一个人点餐时,我们在移动应用程序中使用(new Date()).getTime()并将其作为点餐日期传递

每次下订单时,firebase触发器都会在JSON realtime DB对象中更新当天的总销售额。为了保存总销售额,我们使用一天的开始作为日期时间戳。使用以下公式计算:

 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上面打印时也是如此