在Meteor中使用moment.tz.setDefault()时的作用域是什么
What is the scope of moment.tz.setDefault() when used in Meteor?
TL;DR moment.tz.setDefault()
的范围是什么
我确信我的问题源于我对JavaScript和Meteor都缺乏经验,但我已经连续几天在这个问题上挣扎了。
我正在开发一款必须考虑客户端时区的应用程序,但我在强制服务器代码使用客户端时区方面遇到了很大困难。在这一过程中的某个地方——从客户端按下"提交"到Meteor插入的那一刻——我的时区设置正在丢失,(服务器的)本地时间正在使用。
应用程序流程如下:
- (客户端)用户提交表单
- 执行(客户端)数据验证
- (服务器)Meteor方法被调用
- 执行数据的(服务器)验证(与前面的代码相同)
- 应用(服务器)业务逻辑
- (服务器)插入数据库
我在第1步捕获了时区,尝试将其通过所有步骤,但我一定错过了什么,因为在4到5之间,时区(似乎)丢失了。速度是,我不明白为什么。我已经检查了100次,尝试了各种不同的排列,但都不知道差距在哪里(我用了太多console.log()
,太疯狂了。)
因此,我发现了moment.tz.setDefault()
,并尝试在我的应用程序中的每个.js文件上至少使用一次,而不是在使用Moment()
的每个点设置时区(因为它默认为以本地时间计算)。但它没有起作用。
读到这篇文章,听起来可能我没有做足够的测试,但事实并非如此。我已经花了10个小时在这上面了,但我只是不明白。我很想分享代码,但我认为它太长太复杂了,无法正确分享,所以我已经尽力解释了这个问题。
好消息!你把它搞得太复杂了:-)
打开浏览器控制台&类型CCD_ 5。注意到它在正确的时区吗?这是因为时区转换发生在客户端上。
现在,键入time.valueOf()
。正如你可能知道的,你已经得到了自1970年1月1日以来的毫秒数……但在哪个时区??你猜对了,UTC!
因此,如果您所做的只是保存一个数字,并且客户端完全能够将该数字转换为本地时区,为什么不在服务器上以UTC保存时间呢?您将在数据库中获得一个ISODate()(这是一个奇特的int64)。然后,当你在客户端上检索它时,你可以把它放在他们的本地时间(他们可能正在旅行!)或你选择的任何其他时区。如果是在某个城市聚会,只需掌握该城市的时区&将其应用于现场。提示:现在是使用moment.js的合适时机,而不是之前!
编辑时间模式:
根据新的信息,我想你有一个接受arrivalTime
&然后确保时间在earlyArrival
和lateArrival
之间,例如上午7:00-8:30。因此,将时间保存为日期
timeToDate = function(time) {
return new Date('1970 1 1 ' + time);
};
earlyArrival = timeToDate('7:30 AM');
arrivalTime = timeToDate('8:00 AM');
lateArrival = timeToDate('8:30 AM');
然后,通过简单的数学验证:earlyArrival < arrivalTime
。
或者,如果您使用简单的模式(您应该这样做),验证模式可能如下所示:
departureTime: {
type: Date,
min: timeToDate('5:00 PM'),
max: timeToDate('6:30 PM'),
autoValue: function() {
return timeToDate(this.value);
},
custom: function () {
if (this.value < this.field('arrivalTime').value) {
return "lateAfterEarly";
}
}
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 在Meteor中使用moment.tz.setDefault()时的作用域是什么
- Node.js:在模块作用域中使用“this”运算符的上下文是什么
- 什么's是在JavaScript中的循环中定义的变量的作用域
- 在控制器之间共享作用域变量的最佳实践是什么
- Angularjs-元素上有多个指令,其中一个是隔离作用域
- Javascript中的作用域是什么
- 在AngularJS中创建子作用域的所有指令是什么
- 用JavaScript编写块作用域的最短方法是什么
- 在javascript函数的作用域中定义变量的最佳方法是什么?
- 主干——DOM元素更有效的作用域查找方法是什么?
- Angular' $mdDialog中使用了什么作用域?
- jQuery/Javascript作用域,可能是变量作用域冲突
- 什么是正确的方式来指示你的作用域,你的谷歌api已经加载
- 将ES7异步回调绑定到父作用域上下文的最简洁的方法是什么?
- 控制台上的Angular:获取我创建的作用域(不是整个作用域)
- 什么是“JavaScript与作用域”在MongoDB
- 词法作用域概念在JavaScript中的确切含义是什么?
- 什么是javascript中的作用域链扩充
- Javascript中的分数递增(可能是变量作用域问题?)