我正在编写一个原型函数,它从对象中获取一个日期,然后向它添加一个千兆秒(100亿秒)。这是我的代码:
var Gigasecond = function(userDate){
this.userDate = userDate;
}
Gigasecond.prototype.date = function(){
var gigaDate = this.userDate;
var gigaSecond = Math.pow(10, 9);
console.log("This is the first console log: " + this.userDate);
//adding the billion seconds to the date
gigaDate.setFullYear(gigaDate.getFullYear() + Math.floor(gigaSecond / 31536000));
gigaDate.setDate(gigaDate.getDate() + Math.floor((gigaSecond % 31536000) / 86400));
gigaDate.setHours(gigaDate.getHours() + Math.floor(((gigaSecond % 31536000) % 86400) / 3600));
gigaDate.setMinutes(gigaDate.getMinutes() + Math.floor((((gigaSecond % 31536000) % 86400) % 3600) / 60));
gigaDate.setSeconds(gigaDate.getSeconds() + (((gigaSecond % 31536000) % 86400) % 3600) % 60);
console.log("this should equal the first console log: " + this.userDate);
}
输入this.userDate
的日期为Sunday, Sep 13, 2015 18:00
。我想保持this.userDate
完整的功能的另一部分。问题是,当我更改gigaDate
时,它也会更改this.userDate
。这是控制台输出:
This is the first console log: Sun Sep 13 2015 18:00:00 GMT-0600 (MDT)
this should equal the first console log: Thu May 30 2047 19:46:40 GMT-0600 (MDT)
任何提示?
答案 0 :(得分:1)
您想要创建一个新的日期对象,而不是简单地将它们分配给另一个。
var Gigasecond = function(userDate){
this.userDate = userDate;
}
Gigasecond.prototype.date = function(){
var gigaDate = new Date(this.userDate);
var gigaSecond = Math.pow(10, 9);
console.log("This is the first console log: " + this.userDate);
//adding the billion seconds to the date
gigaDate.setFullYear(gigaDate.getFullYear() + Math.floor(gigaSecond / 31536000));
gigaDate.setDate(gigaDate.getDate() + Math.floor((gigaSecond % 31536000) / 86400));
gigaDate.setHours(gigaDate.getHours() + Math.floor(((gigaSecond % 31536000) % 86400) / 3600));
gigaDate.setMinutes(gigaDate.getMinutes() + Math.floor((((gigaSecond % 31536000) % 86400) % 3600) / 60));
gigaDate.setSeconds(gigaDate.getSeconds() + (((gigaSecond % 31536000) % 86400) % 3600) % 60);
console.log("this should equal the first console log: " + this.userDate);
console.log("this should equal the new date gigaDate: " + gigaDate);
}
现在为我输出以下内容:
This is the first console log: Mon Aug 01 2016 11:43:57 GMT+1000 (AUS Eastern Standard Time)
this should equal the first console log: Mon Aug 01 2016 11:43:57 GMT+1000 (AUS Eastern Standard Time)
this should equal the new date gigaDate: Thu Apr 16 2048 13:30:37 GMT+1000 (AUS Eastern Standard Time)