如何使用javascript添加周数?

如何使用javascript添加周数?,javascript,date-format,Javascript,Date Format,Javascript绝对不是我的强项。我已经尝试了几个小时了,似乎在某处被日期格式卡住了 我有一个表单,其中用户选择了一个日期(dd/mm/yyyy),然后取这个日期,并向其中添加2周,然后将日期复制到另一个表单字段 我在下面的最新尝试甚至没有添加日期,只是将一个表单字段中选定的日期复制到另一个表单字段中,如果我选择“03/02/2012”,它将输出“Fri Mar 02 2012 00:00:00 GMT+0000(GMT标准时间)”,因此它将以美式格式输出,同时输出完整日期。我如何让它以相同

Javascript绝对不是我的强项。我已经尝试了几个小时了,似乎在某处被日期格式卡住了

我有一个表单,其中用户选择了一个日期(dd/mm/yyyy),然后取这个日期,并向其中添加2周,然后将日期复制到另一个表单字段

我在下面的最新尝试甚至没有添加日期,只是将一个表单字段中选定的日期复制到另一个表单字段中,如果我选择“03/02/2012”,它将输出“Fri Mar 02 2012 00:00:00 GMT+0000(GMT标准时间)”,因此它将以美式格式输出,同时输出完整日期。我如何让它以相同的格式发布并添加2周

function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    document.frmAccept.acceptLicence.value = date1;

}

date1
指定为日期对象,该对象表示传递给它的字符串。您在
acceptLicense
值中看到的是日期对象的
toString()
表示形式(请尝试
alert(date1.toString())
查看此内容)

要按需要输出,必须使用字符串连接和

如果增加2周,则应在当前日期的基础上增加14天

date1.setDate(date.getDate() + 14);
。。。这将自动处理月增长等

最后,你会得到一份工作

var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
N.BJavaScript中的月份为0索引(一月=0,十二月=11),因此该月份的
+1

Edit:为了处理您的评论,您应该按如下方式构造
date
,因为
date
参数应该是“表示RFC2822或ISO 8601日期的字符串”。()


这应该符合你的要求

function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    date1.setDate(date1.getDate() + 14);
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
您可以这样做:

let numWeeks = 2;
let now = new Date();
now.setDate(now.getDate() + numWeeks * 7);
alert(now);
你可以看到小提琴

根据

setDate()方法设置日期对象相对于当前设置的月份开始的日期

一切都好

这将以客户机约定中的字符串形式返回date1

要创建一个新的日期date2,再多2周(2周=2*7*24*60*60秒),请执行以下操作:


要解析特定的
dd/mm/yyyy
格式和14天的增量天数,您可以执行类似于拆分部分的操作,并使用指定的y/m/d创建日期对象。(立即增加天数)如果分隔符始终为
-
,则以下各项应起作用:

function LicenceToOccupy(acceptCompletionDate)
{
    var parts = acceptCompletionDate.split("/");
    var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks)
    document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done

}

只需对Toast的答案进行一些最小的修改,您就可以获得所需的确切格式dd/mm/yyyy

function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    date1.setDate(date1.getDate() + 14); //This adds the two weeks

    var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate();
    var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth();

    document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear();
}

这可能无法回答问题本身,但可以用这些公式找到解决方案

6.048e+8
=1周(毫秒)

Date.now()
=现在以毫秒为单位

Date.now()+6.048e+8
=1周后的今天

var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));
Date.now()+(6.048e+8*2)
=2周后的今天

var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));
新日期(Date.now()+(6.048e+8*2))
=从今天起两周内的日期对象

var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));

这里是您要添加到日期中的7天

感谢您的回复,如果我选择'04/01/2012'(dd/mm/yyyy),我在另一个字段中得到的值是'15/4/2012'(dd/mm/yyyy),因此它似乎仍然是将14天添加到月份而不是日期中,或者更可能的是,格式在某个地方仍然是错误的。我想在添加14天之前,它需要以某种方式进行格式设置?因为(date1.getDate()+14)假定其格式为mm/dd/yyyy@JBoom:
Date
参数应该是“表示RFC2822或ISO 8601日期的字符串。”()。最好使用另一个构造函数,它接受年、月、日作为单独的参数(参见我编辑的答案)。谢谢Matt,格式很好,但是现在向月份添加1会把它搞糟,即使它添加了一个或没有!这是应该做的,但并非在所有浏览器中都是如此(例如,Chrome会忽略我的系统设置,就像最近版本的Firefox一样,但不是当前版本的Firefox)。我很喜欢这是Arvind的答案,但出于某种原因,需要额外的
parseInt
。一周的毫秒不是
6.04e+8
而是
6.048e+8
。如果使用这种方法,也要小心DST。
function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    date1.setDate(date1.getDate() + 14); //This adds the two weeks

    var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate();
    var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth();

    document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear();
}
var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));