编辑日期对象Javascript
我试图编辑javascript日期对象从系统时钟检索日期的方式。我正在测试一个Javascript应用程序,这不是一个用于生产的更改,严格来说是用于测试目的 我希望传递一个带有年、月和日的参数,并让date对象检索该参数,而不是从系统时钟获取日期 创建新实例的问题是,它将返回相同的日期,而不使用系统时钟更新时间。即返回编辑日期对象Javascript,javascript,date,object,prototype,Javascript,Date,Object,Prototype,我试图编辑javascript日期对象从系统时钟检索日期的方式。我正在测试一个Javascript应用程序,这不是一个用于生产的更改,严格来说是用于测试目的 我希望传递一个带有年、月和日的参数,并让date对象检索该参数,而不是从系统时钟获取日期 创建新实例的问题是,它将返回相同的日期,而不使用系统时钟更新时间。即返回 Date {Fri Jan 20 2012 00:00:00 GMT+0700 (SE Asia Standard Time)} Date {Fri Jan 20 2012 00
Date {Fri Jan 20 2012 00:00:00 GMT+0700 (SE Asia Standard Time)}
Date {Fri Jan 20 2012 00:00:00 GMT+0700 (SE Asia Standard Time)}
Date {Fri Jan 20 2012 00:00:00 GMT+0700 (SE Asia Standard Time)}
Date {Fri Jan 20 2012 00:00:00 GMT+0700 (SE Asia Standard Time)}
通过仅编辑年、月和日,我需要保留分钟、秒等,以随系统时钟更新,而不是出于测试目的而保持静态
这是我目前正在做的,但对我来说并不奏效
Date = function (Date) {
return function () {
var date = new Date();
date.setFullYear(%s)
date.setMonth(%s);
date.setDate(%s);
return date;
}
}(Date)
alert(new Date())
编辑:
我遇到的主要问题是,我需要在我正在测试的窗口中打开控制台,让它显示为我想要的日期,而如果它不保持秒数不变的话
编辑:
改变浏览器时间的解决方案如下
Date = function(Date){
return function() {
date = new Date();
date.setTime(date.getTime() - %d);
return date;
}
}(Date);
感谢大家的投入,希望这对其他人有所帮助 我不确定这是否是你想要的
function MyDate(year,month,day) {
var date = new Date();
date.setFullYear(year);
date.setMonth(month);
date.setDate(day);
return date;
}
var myDate = new MyDate(1990,04,10);
console.log(myDate);
如果您有这样的
:
<div id="mydate"></div>
下面是一个。我不打算涉及替换日期对象构造函数本身(如果这是您的意思的话),但我认为这正是您想要做的: [已编辑-已替换日期对象构造函数]:
Date = (function(Date) {
return function(y,m,d,h,min,s,mil) {
var newDateObj;
if(mil !== undefined)
newDateObj = new Date(y,m,d,h,min,s,mil);
else if(s !== undefined)
newDateObj = new Date(y,m,d,h,min,s);
else if(min !== undefined)
newDateObj = new Date(y,m,d,h,min);
else if(h !== undefined)
newDateObj = new Date(y,m,d,h);
else if(d !== undefined)
newDateObj = new Date(y,m,d);
else if(m !== undefined)
newDateObj = new Date(y,m);
else if(y !== undefined)
newDateObj = new Date(y);
else newDateObj = new Date();
// Set up date object, offsets, and update function
var dateOffset = new Date().getTime()-newDateObj.getTime();
var dateObject = new Date(new Date().getTime()-dateOffset);
var updateDateObj = function() {
dateObject.setTime(new Date().getTime()-dateOffset);
};
// Either create a wrapper for all date/time functions to update:
var doGetTime = dateObject.getTime;
dateObject.getTime = function() {
updateDateObj();
return doGetTime.call(dateObject);
};
// Or do an update on interval (not reccommended):
window.setInterval(updateDateObj, 1);
return dateObject;
};
}(Date));
var x = new Date(2014, 10, 20);
window.setInterval(function() {
document.body.innerHTML = x;
}, 1000);
你可以看到这张照片。
您可以看到。经过思考,我决定添加另一个答案。在重新检查您的帖子和评论后,我得出了以下结论,我相信您会接受这一正确答案: [更新:添加了newJSSystemDate层]
// set up newJSSystemDate with complicated scoping magic
var newJSSystemDate = (function(actualDateObject){
return function(newDate) {
// use actual date if new date is not specified
if(newDate === undefined) Date = actualDateObject;
// otherwise update global constructor for Date()
else Date = (function(Date) { // calculate offset
var dtOffset = new Date().getTime()-newDate.getTime();
return function(y,m,d,h,min,s,mil) {
var newDateObj;
// handle all correct usages of Date()
if(mil !== undefined)
newDateObj = new Date(y, m, d, h, min, s, mil);
else if(s !== undefined)
newDateObj = new Date(y, m, d, h, min, s);
else if(min !== undefined)
newDateObj = new Date(y, m, d, h, min);
else if(h !== undefined)
newDateObj = new Date(y, m, d, h);
else if(d !== undefined)
newDateObj = new Date(y, m, d);
else if(m !== undefined)
newDateObj = new Date(y, m);
else if(y !== undefined)
newDateObj = new Date(y);
else // return calculated date object
newDateObj = new Date(new Date().getTime()-dtOffset);
return newDateObj;
};
}(actualDateObject));
};
}(Date));
// set js time to a specific date/time
newJSSystemDate(new Date(2014, 10, 20));
// check what Date() returns every second
window.setInterval(function() {
document.body.innerHTML = new Date();
}, 1000);
// set js time back to normal after 10 seconds
window.setTimeout(function() {
newJSSystemDate();
}, 10000);
为什么不获取一个包含系统日期和时间的普通日期对象,然后修改它的年、月、日字段?在JavaScript中无法做到这一点-您可以:a)重构被测代码以获取一个返回日期的函数或服务(这样您就可以传入一个返回所需日期的模拟服务或B)更新实际的系统时钟我很感兴趣,看看我是否可以使这项工作。当我完成时,我会发布一个更新。你只需要返回对象所期望的所有可能的方法。你想做什么?您知道JavaScript中的
Date
对象允许您传递其构造函数参数,对吗<代码>var myDate=新日期(年、月、日)因为创建实例会使分钟、秒等保持不变并且不会更新,所以这将不起作用。即使对其调用setInterval也不起作用。我尝试过这个解决方案,但失败了。谢谢。Jut意识到这个解决方案是@RocketHazmat在上面的评论中提出的。所以,是的,这更接近我想要的,但我也在寻找,当我在页面上打开控制台时,它会更新调用对象本身的日期。这是我尝试此方法时的外观,我编辑了答案以替换日期对象,这使它更简单。它使用对象的创建时间作为使用偏移进行更新的时间参考。如果您想使用页面加载时间作为偏移量,请告诉我。我只是不确定这是否是你想要的。我编辑的fiddle位于令人惊讶的用例场景中:newJSSystemDate({getTime:function(){return 0;}}})代码>
// set up newJSSystemDate with complicated scoping magic
var newJSSystemDate = (function(actualDateObject){
return function(newDate) {
// use actual date if new date is not specified
if(newDate === undefined) Date = actualDateObject;
// otherwise update global constructor for Date()
else Date = (function(Date) { // calculate offset
var dtOffset = new Date().getTime()-newDate.getTime();
return function(y,m,d,h,min,s,mil) {
var newDateObj;
// handle all correct usages of Date()
if(mil !== undefined)
newDateObj = new Date(y, m, d, h, min, s, mil);
else if(s !== undefined)
newDateObj = new Date(y, m, d, h, min, s);
else if(min !== undefined)
newDateObj = new Date(y, m, d, h, min);
else if(h !== undefined)
newDateObj = new Date(y, m, d, h);
else if(d !== undefined)
newDateObj = new Date(y, m, d);
else if(m !== undefined)
newDateObj = new Date(y, m);
else if(y !== undefined)
newDateObj = new Date(y);
else // return calculated date object
newDateObj = new Date(new Date().getTime()-dtOffset);
return newDateObj;
};
}(actualDateObject));
};
}(Date));
// set js time to a specific date/time
newJSSystemDate(new Date(2014, 10, 20));
// check what Date() returns every second
window.setInterval(function() {
document.body.innerHTML = new Date();
}, 1000);
// set js time back to normal after 10 seconds
window.setTimeout(function() {
newJSSystemDate();
}, 10000);