javascript将分钟添加到新日期();在使用对象之前
javascript add minutes to new Date(); before using the object
我有一个函数调用,它启动了一堆计时器,我想在每个计时器上增加几分钟,这样它们就不会全部从零开始。我在以下方面取得了成功:
var currentDate = new Date();
var twentyMinutesLater = new Date(currentDate.getTime() + (20 * 60 * 1000));
new CountUp(twentyMinutesLater, 'counter03');
我很想跳过为所有我想要的计时器创建var twentyMinutesLater等等,我只是无法正确地获取语法,或者这是不可能的。有没有办法在下面的函数调用中添加毫秒。
new CountUp(new Date(), 'counter03');
我试过:
new CountUp((new Date() + (20 * 60 * 1000)), 'counter03');
结果NaN-NaN:NaN:NaN,所以它不是一个数字带双引号的结果相同。
有没有javascript语法大师有什么想法?
在您的特定代码中,您将Date对象传递给计数器代码,但这不是预期的。它期望一个时间值,从中它将创建自己的Date对象(您可以在Counter函数的构造函数中看到这一点)。此外,计数器代码不会在未来花费时间,只会在过去花费时间(也许是因为它不想处理负面时间——我不知道)。
这里有一个工作示例,我修改了在回答其他问题时使用的另一个jsFiddle。
function addCounter() {
var currentDate = new Date();
var twentyMinutesLater = currentDate.getTime() - (20 * 60 * 1000);
var div = document.createElement("div");
div.id = "counter" + counterNum++;
document.body.appendChild(div);
new CountUp(twentyMinutesLater, div.id);
}
这里有一个jsFiddle,它可以让你输入分钟数,它会以这个值启动一个计数器:http://jsfiddle.net/jfriend00/vnf5z/.
应该执行以下操作:
var d = new Date();
new CountUp(d.setMinutes(d.getMinutes() + 20), 'counter03');
根据CountUp构造函数如何使用传递给它的日期对象,以及是否要重用d,您可能需要:
var d = new Date();
new CountUp(new Date(d.setMinutes(d.getMinutes() + 20)), 'counter03');
以便每次调用CountUp都会得到一个不同的日期对象。
这只是我在Rails中看到的另一种方法。您可以使用以下语法创建相对日期对象,
(20).minutes().fromNow()
或者,如果你讨厌括号里的噪音,你可以这样做(只在ES5兼容的浏览器上),
(20).minutes.fromNow
这是第一个在Number原型上添加方法的非ES5解决方案。
Number.prototype.minutes = function() {
// minutes to milliseconds
return this * 60 * 1000;
};
Number.prototype.fromNow = function() {
var futureDate = new Date(Date.now() + this);
return futureDate;
};
new CountUp((20).minutes().fromNow(), 'foo')
以下是添加了函数支持属性的ES5解决方案。
Object.defineProperties(Number.prototype, {
minutes: {
get: function() {
// minutes to milliseconds
return this * 60 * 1000;
}
},
fromNow: {
get: function() {
var futureDate = new Date(Date.now() + this);
return futureDate;
}
}
});
new CountUp((20).minutes.fromNow, 'foo')
关于原生客体的外延,有不同的学派。一个团体不惜一切代价禁止使用它,而另一个团体则鼓励几乎在任何地方使用它。与任何事情一样,保持平衡很重要。
new Date()确实返回了一个对象,而不是时间戳,所以你不应该在那里使用数学运算(当你期望得到一个数字时,至少不要相加)。使用Date.getTime():
//when you need a Date-object as argument
new CountUp(new Date(new Date().getTime() + (20 * 60 * 1000)) , 'counter03');
//when you need the timestamp as argument
new CountUp((new Date().getTime() + (20 * 60 * 1000)) , 'counter03');
看小提琴来识别区别:http://jsfiddle.net/doktormolle/8v4Tx/
- 比较从函数和生成的日期对象
- 如何获得一个只有时间的moment.js日期对象
- 使用moment.js获取时间分区的偏移日期对象
- 对象数组返回自最近日期以来的最高总体值
- JavaScript JSON关联对象键和值都作为日期时间戳
- 获取本地时间的JS日期,日期对象中没有时区详细信息
- 将某个时间格式转换为日期对象
- date对象未在javascript中返回正确的日期值
- 正在使用日期字符串初始化javascript日期对象
- 在CouchDB Map函数中发出日期时-对日期对象调用的内容
- 如何将事件的日期放入fullcalendar中的日期对象中
- 为什么在JavaScript中可以从另一个日期对象中减去日期对象
- 理解日期对象接收参数时的getDay()方法
- JS日期对象setUTCMonth()将月份增加2
- 时间-日期对象JavaScript getUTCMilliseconds
- 如何根据创建日期对对象进行排序,以插入Meteor的高图表
- JavaScript日期接收为像这次旅行一样的对象.日期:“/日期(1426530600000)/”;
- 将带有 AM/PM 的日期字符串转换为 javascript 日期对象
- Javascript排序对象日期
- MVC控制器返回JSON对象日期属性"Now"“帮助”