为周末调整Javascript未来日期

为周末调整Javascript未来日期,javascript,Javascript,我使用下面的javascript代码来显示基于当前日期的未来7天 <script > <!-- var m_names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var d_names = ["Sunday","Monday", "Tuesday", "Wedne

我使用下面的javascript代码来显示基于当前日期的未来7天

<script >
<!--

var m_names = ["January", "February", "March", 
"April", "May", "June", "July", "August", "September", 
"October", "November", "December"];

var d_names = ["Sunday","Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Saturday"];

var myDate = new Date();
myDate.setDate(myDate.getDate()+7);
var curr_date = myDate.getDate();
var curr_month = myDate.getMonth();
var curr_day  = myDate.getDay();
document.write(d_names[curr_day] + "," + m_names[curr_month] + " " +curr_date);

//-->
</script>

我使用这个javascript代码让我的客户知道他们什么时候能拿到他们的软件包

脚本会自动将7天添加到当前日期。如果当前日期是周六或周日,我希望它调整未来日期(+7)

如果当前日期是星期六,我希望增加(+9天)。如果当前日期是星期日,我希望增加(+8天)

所有当前的星期一到星期五之间的天数,我希望增加(+7天)

关于如何实现这一点,您有什么想法吗?

您可以使用.getDay()方法查找工作日。 例如


请注意,星期一从0开始,星期二从1开始,等等。

按照CompuChip的回答(对不起,C,评论时间太长了!):

您也可以在这里使用
开关
语句(如果您不知道如何操作:这是一个查找和试验它的绝佳时机!)

第三种有趣的方法是使用数组。现在您知道了星期一=0、星期二=1等,您可以为每个工作日构建一个要添加的值列表:

var nextWeek = [7, 7, 7, 7, 7, 9, 8];
myDate.setDate(myDate.getDate()+nextWeek[myDate.getDay()]);
但是,周数与调整值之间存在严格的关系:

myDate.setDate( myDate.getDate()+ ((myDate.getDay() < 5) ? 7 : 14-myDate.getDay()) );
myDate.setDate(myDate.getDate()+((myDate.getDay()<5)?7:14 myDate.getDay());

其实很简单:

var days = 24 * 60 * 60 * 1000;

function getFutureDate(date) {
    switch (date.getDay()) {
    case 0:  return new Date(date.getTime() + 8 * days);
    case 6:  return new Date(date.getTime() + 9 * days);
    default: return new Date(date.getTime() + 7 * days);
    }
}
现在您可以按如下方式使用
getFutureDate

var futureDate = getFutureDate(new Date);
function getFutureDate(date) {
    switch (date.getDay()) {
    case 0:  return addDate(date, 1 * weeks + 1 * days);
    case 6:  return addDate(date, 1 * weeks + 2 * days);
    default: return addDate(date, 1 * weeks + 0 * days);
    }
}
但是,我们可以编写一个更通用的解决方案:

var milliseconds = 1
  , seconds      = 1000 * milliseconds
  , minutes      = 60 * seconds
  , hours        = 60 * minutes
  , days         = 24 * hours
  , weeks        = 7 * days;

function addDate(date, time) {
    return new Date(date.getTime() + time);
}
现在我们可以将我们的
getFutureDate
函数重写如下:

var futureDate = getFutureDate(new Date);
function getFutureDate(date) {
    switch (date.getDay()) {
    case 0:  return addDate(date, 1 * weeks + 1 * days);
    case 6:  return addDate(date, 1 * weeks + 2 * days);
    default: return addDate(date, 1 * weeks + 0 * days);
    }
}

当然,在这种情况下,最好只使用旧的
getFutureDate
函数。然而,我只是想告诉你如何从日期中添加(或减去)任意的时间。< /p>如果所有的日期都在中间,则将< <代码> 7 >代码>为<代码> 9 < /代码>。i、 例如,如果当前日期是星期二,并且天数超过
6
,则添加
2
。感谢您的帮助,但不幸的是,我在javascript方面一点也不擅长。我不知道如何插入这个。非常感谢。第一种方法效果最好:)你太棒了!实际上,将myDate.getDay分配给一个变量可能会有一点改进,这样可以防止检索(可能是计算?)它5次。@CompuChip:是的,这就是我建议使用
开关的原因。这似乎是第一个——技术上最差的——选择。我很可能会使用一个开关,因为它是一个无休止的if..else列表和数组刚性之间的折衷。