Javascript:错误的日期计算

Javascript:错误的日期计算,javascript,html,Javascript,Html,因此,我刚刚发布了一个关于此代码的问题(已回答): 现在的问题是,我手机中显示的日期是1969/12/31(甚至不是星期四) 计算上周四日期时我是否做错了什么?您试图仅根据上周四当月的日期设置日期。试着这样做: var daysSinceThursday = (dayofWeek + 3) % 7; var lastThursday = new Date(currentTime.getTime()); lastThursday.setDate(currentTime.getDate() - da

因此,我刚刚发布了一个关于此代码的问题(已回答):

现在的问题是,我手机中显示的日期是1969/12/31(甚至不是星期四)


计算上周四日期时我是否做错了什么?

您试图仅根据上周四当月的日期设置日期。试着这样做:

var daysSinceThursday = (dayofWeek + 3) % 7;
var lastThursday = new Date(currentTime.getTime());
lastThursday.setDate(currentTime.getDate() - daysSinceThursday);
var dd = lastThursday.getDate();

var mm = lastThursday.getMonth() + 1; 
var yyyy = lastThursday.getFullYear();

您试图仅根据上周四当月的日期设置日期。试着这样做:

var daysSinceThursday = (dayofWeek + 3) % 7;
var lastThursday = new Date(currentTime.getTime());
lastThursday.setDate(currentTime.getDate() - daysSinceThursday);
var dd = lastThursday.getDate();

var mm = lastThursday.getMonth() + 1; 
var yyyy = lastThursday.getFullYear();

这是因为
.getDate()
返回月份的日期。因此,你是基于一个小于30的序列号来建立你的日期,这甚至不会将你的秒数设置为1以上

使用
.setDate()
而不是构建新日期:

date.setDate(date.getDate() - daysSinceThursday);

.setDate()
将修改现有的日期对象,它不会返回新的日期。

这是因为
.getDate()
返回当月的日期。因此,你是基于一个小于30的序列号来建立你的日期,这甚至不会将你的秒数设置为1以上

使用
.setDate()
而不是构建新日期:

date.setDate(date.getDate() - daysSinceThursday);

.setDate()
将修改现有的日期对象,它不会返回新的日期。

请注意,在执行此操作后,
currentTime
也将设置为last周四,因为
last周四
currentTime
都引用相同的
date
对象。要在不修改
当前时间的情况下设置
上周四
,您需要创建一个新的
日期
。要复制日期:
var lastsurday=新日期(currentTime.valueOf())
。但是,在这种情况下,您实际上不需要副本。你可以这样做:
var lastsurday=new Date()
@gilly3:好的观点。我真正想做的是保持OP的其余代码完好无损,但是如果在
上周四
修改
日期后访问
currentTime
,那么它就不正确了。我已经更新了代码和fiddle请注意,在执行此操作后,
currentTime
也将设置为last Thready,因为
LastThready
currentTime
都引用相同的
Date
对象。要在不修改
当前时间的情况下设置
上周四
,您需要创建一个新的
日期
。要复制日期:
var lastsurday=新日期(currentTime.valueOf())
。但是,在这种情况下,您实际上不需要副本。你可以这样做:
var lastsurday=new Date()
@gilly3:好的观点。我真正想做的是保持OP的其余代码完好无损,但是如果在
上周四
修改
日期后访问
currentTime
,那么它就不正确了。我已经更新了密码和小提琴