我需要一种方法来始终将整分钟添加到时间戳中,即使由于计划的闰秒,该分钟长 61 秒也是如此。有谁知道 moment().add(1, 'minute') 是否添加一分钟而不考虑闰秒?或者它总是增加 60 秒?
我发现它如何处理夏令时和闰年的加法运算,但对于闰秒则一无所获。
给出一些关于为什么这很重要的背景:
我需要创建一个 CSV 文件,其中包含各种传感器的一系列每分钟传感器数据,格式如下:
time,sensor1,sensor2
1491329921800,20,21
1491329981800,22,21
我的数据存储有一个小时开始的时间戳,然后是一个包含 60 个数据点的数组。
{
timestamp: Date(2017,2,24,12,0,0),
temperature: [20, 22, 23, ... <60 elements total>]
}
我通过为第一个数据点提供小时的时间戳并将每个后续数据点的值添加 60 秒(因为闰秒总是发生在小时结束时,我只一次做一个小时,这应该没问题)。
然后我需要构建一个字典,将每个时间戳映射到那一刻的值。这是必要的,这样我就可以在 CSV 的右行中获得正确的数据;传感器可能在不同的时间启动,或者可能在某个小时内关闭电源,或者在该小时的某个部分没有报告;我不能假设所有传感器都具有相同的数据。
我正在查找将使用以下代码创建 CSV 的所有时间戳:
var date = moment(startDate);
var end = endDate.getTime();
var timestamps = [];
while(date.valueOf() < end) {
timestamps.push(date.valueOf());
date.add(1, 'minute')
}
timestamps.push(date.valueOf());
但我不确定它是否安全。如果需要,我可以将 date.add(1, 'minute') 更改为 date.add(1, 'minute').startOf('minute'),但这可能会增加很多执行时间,我想尽可能避免它。
最佳答案
您不必担心这一点,因为 JavaScript 不知道闰秒。考虑这段代码:-
// 1. Initialize date
var newDate = new Date('1 March 1972 11:30:00');
// 2. Convert to milliseconds and add 20 years
var msec = Date.parse(newDate) + 631152000000;
// 3. Convert milliseconds back to normal date format
newDate = new Date(msec);
第 2 步中的大数字是 20 年的毫秒数,由等式 ((15 x 365) + (5 x 366)) x 24 x 60 x 60 x 1000 给出; 15 年@每年 365 天加上 5 年@每年 366 天,每天 24 小时,每小时 60 分钟,每分钟 60 秒,每秒 1000 毫秒。
执行后给出的答案是“1 March 1992 11:30:00”。如果 JavaScript 考虑到闰秒,它将是“1992 年 3 月 1 日 11:30:16”,因为多出了 16 秒(或“1992 年 3 月 1 日 11:29:44”,具体取决于您如何看待它)。
总之,如果您需要知道两个日期之间实际经过了多少毫秒,那么您需要编写一些代码来查找在它们跨越的时间段内发生了多少闰秒(您可以找到原始数据对于那个 here ),但对于正常的时间记录,我们可以愉快地忽略这个不受欢迎的小并发症。
关于javascript - moment.js 如何处理闰秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216437/
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:
我有这个: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
我设置了以下模型:classContact:no_freq?validates_presence_of:freq,:if=>:no_band?protecteddefno_freq?freq.nil?enddefno_band?band.nil?endendclassBand当我在我的新View中输入频率时,如果输入了频率,则不允许指定波段。这在我的其他观点中造成了问题,因为band现在为零。我如何允许不指定band并在我的index和showView中显示为空,然后在editView中允许在以后指定一个。通过执行以下操作,我已经能够让我的索引显示空白:contact.band&&co
我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文