我为我的 JavaScript SPA 应用程序编写了一些测试代码。我为整个 SPA 设置了语言环境,假装它在世界不同地方运行。
现在,我设置语言环境覆盖 Date() 类的 getTimezoneOffset() 函数:
Date.prototype.getTimezoneOffset = function () { return 120 };
而且效果很好。
但是,在 SPA 的某些部分,我使用的是 MomentJS(由于标准 DateTime 库的某些限制)。覆盖是否也会影响 MomentJS 语言环境?还是不行?
最佳答案
您不应覆盖 Date 对象的 getTimezoneOffset 函数。这实际上不会像您期望的那样工作。它只会改变偏移量通过 getTimezoneOffset 公开的方式,它不会改变 Date 对象本身的行为,或者它具有的其他功能。
在上面,您可以看到尽管更改了偏移函数,但日期仍然使用太平洋时间。
就 moment.js 而言,您当然可以使用 utcOffset 函数设置 moment 对象的偏移量。
var m = moment();
var o = m.utcOffset(); // returns the current offset
m.utcOffset(-120); // sets a different offset
但是:
偏移量的符号符合 ISO8601 标准,正值是 UTC 的东。 JavaScript 的 getTimezoneOffset 具有正值 west UTC。
改变偏移量只会改变 moment 本身产生的值,例如 format 函数和其他各种函数。它不会及时更改基础时刻,因此如果您调用 .toDate() 来获取 Date 对象,该对象将具有原始系统时区。
Date 对象不能被欺骗到在其他时区工作。您可能遇到的任何尝试将时间偏移偏移量的方法都是有缺陷的,并且在一些极端情况下会失败。
偏移量不是时区。时区可以根据夏令时以及其他历史和政治原因切换偏移量。阅读 the timezone tag wiki 中的“时区!= 偏移量” .如果您打算设置时区,那么您应该使用 moment-timezone插件,然后做类似的事情:
moment().tz('America/New_York')
您问过您现有的覆盖是否会弄乱 moment.js - 是的。 moment 使用 getTimezoneOffset 函数并期望它保持不变。
关于javascript - 在 MomentJS 中设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668351/
我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
最近我安装了Paperclipgem,我正在努力让默认图像在我的系统上工作,我将图像文件放在assets/images/pic.png中。这是我的模型User中的代码:has_attached_file:pic,:styles=>{:medium=>"300x300>",:thumb=>"100x100>"},:default_url=>'missing_:avatar.png'#:default_url=>'assets/images/avatar.png'has_attached_file:attach这是我的AddPicPaperClip迁移中的代码:defself.upadd_
在我的场景中,Logstash收到的系统日志行的“时间戳”是UTC,我们在Elasticsearch输出中使用事件“时间戳”:output{elasticsearch{embedded=>falsehost=>localhostport=>9200protocol=>httpcluster=>'elasticsearch'index=>"syslog-%{+YYYY.MM.dd}"}}我的问题是,在UTC午夜,Logstash在外时区(GMT-4=>America/Montreal)结束前将日志发送到不同的索引,并且索引在20小时(晚上8点)之后没有日志,因为“时间戳”是UTC。我们已
假设我的Rails项目中有一个设置实例变量的Ruby类。classSomethingdefself.objects@objects||=begin#somelogicthatbuildsanarray,whichisultimatelystoredin@objectsendendend是否可以多次设置@objects?是否有可能在一个请求期间,在上面的begin/end之间执行代码时,可以在第二个请求期间调用此方法?我想这实际上归结为Rails服务器实例如何fork的问题。我应该改用Mutex还是线程同步?例如:classSomethingdefself.objectsreturn@o
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我试图像这样在我的测试用例中执行获取:request.env['CONTENT_TYPE']='application/json'get:index,:application_name=>"Heka"虽然,它失败了:ActionView::MissingTemplate:Missingtemplatealarm_events/indexwith{:handlers=>[:builder,:haml,:erb,:rjs,:rhtml,:rxml],:locale=>[:en,:en],:formats=>[:html]尽管在我的Controller中我有:respond_to:html,
我正在尝试根据RyanBatesscreencastonsubdomains在Rails3中设置子域.但是它对我不起作用。我有以下设置:#routes.rbconstraints(Subdomain)doget'devices'=>'devices#all'end#lib/subdomain.rbclassSubdomaindefself.matches?(request)#binding.pryrequest.subdomain.present?&&request.subdomain=="admin"endend加载urladmin.localhost:3000/devices应该将