在JavaScript中获取某一天的下周日期

问题描述:

根据今天的日期(新日期()),我希望在下午7点的JavaScript中获得下一个星期四的日期。例如:在JavaScript中获取某一天的下周日期

如果今天的日期是“星期一2017年4月24日13:00:00 GMT”我要寻找的结果:

Thu Apr 27 2017 19:00:00 GMT 

但是,如果今天的日期是“星期四2017年4月27日21: 00:00 GMT“(周四,但是过去7点)我在寻找结果:

Thu May 4 2017 19:00:00 GMT 

任何帮助将不胜感激!

+0

你试过用momentjs https://momentjs.com/ – user93

+0

不幸的是,我只能在这个项目上使用vanilla JavaScript。 – ericalli

+0

var date_next_week = new Date(current_date.getTime()+ 7 * 24 * 60 * 60 * 1000); 这是解决问题的一种方法。 –

也许类似于以下内容(如果您想要更具体的时间刚刚小时和分钟):

// day: 0=Sunday, 1=Monday...4=Thursday... 
 
function nextDayAndTime(dayOfWeek, hour, minute) { 
 
    var now = new Date() 
 
    var result = new Date(
 
       now.getFullYear(), 
 
       now.getMonth(), 
 
       now.getDate() + (7 + dayOfWeek - now.getDay()) % 7, 
 
       hour, 
 
       minute) 
 

 
    if (result < now) 
 
    result.setDate(result.getDate() + 7) 
 
    
 
    return result 
 
} 
 

 
console.log(nextDayAndTime(4, 19, 0).toString()) // Thursday 7pm 
 
console.log(nextDayAndTime(0, 19, 0).toString()) // Sunday 7pm 
 
console.log(nextDayAndTime(1, 19, 0).toString()) // Monday 7pm (later today as of now in my timezone) 
 
console.log(nextDayAndTime(1, 7, 30).toString()) // Monday 7:30am (next week, in my timezone) 
 
console.log(nextDayAndTime(2, 19, 0).toString()) // Tuesday 7pm

两个关键位是now.getDate() + (7 + dayOfWeek - now.getDay()) % 7,该数字出下周四(或指定的一天)从今日开始(这是% 7做什么,和那么if (result < now)会仔细检查所需时间是否已经过去,如果是这样,则会增加一周。

好的。所以如果moment.js不可用,则以毫秒为单位工作。

var d = new Date(); 
var n = d.getTime(); // n == time in milliseconds since 1st Jan 1970 
var weekday = d.GetDay() // 0...6 ; 0 == Sunday, 6 = Saturday, 4 = Thursday 
var numDaysToNextThursday = weekday >= 4 ? 7 - (weekday-4) : 4 - weekday; 
var nextThursday_msecs = n + numDaysToNextThursday * 24 * 60 * 60 * 1000; 
var theDate = new Date(nextThursday_msecs); // this is the date 

编辑:我可以看到周四的7PM是神奇的时刻。以上在这方面并不完全正确;如果我们目前在星期四,无论实际时间如何,它都会将日期设置为提前7天。无论如何,你可能仍然会明白。

通过简单的叙述,您可以轻松获得下一个星期四。

7 - 在一个星期 计算周四的指数 - - 你需要减去一个星期的当日指数以获得周四

var day = new Date(); 
 

 
var days = 7 - day.getDay() + 4; 
 

 
var nextDay = new Date(day.setDate(day.getDate() + days)); 
 

 

 
console.log(nextDay.toString());

在一个星期 4天数

codepen查看其他日子https://codepen.io/kejt/pen/LyRGBX?editors=1111

+0

这只适用于今天是星期一的时候,对吧?我不认为这就是OP想要的 –

+0

它在一周的每一天工作,因为我们做了'day.getDay()' – Kejt