54

Javascript 绝对不是我的强项。我已经尝试了几个小时,并且似乎在某处遇到了日期格式问题。

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

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

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

}
4

8 回答 8

127

你可以这样做 :

let numWeeks = 2;
let now = new Date();
now.setDate(now.getDate() + numWeeks * 7);
alert(now);

你可以在这里看到小提琴。

根据MDN 中的文档

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

于 2012-07-05T12:14:38.800 回答
11

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

6.048e+8= 1 周(以毫秒为单位)

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

Date.now() + 6.048e+8= 从今天起 1 周

Date.now() + (6.048e+8 * 2)= 从今天起 2 周

new Date( Date.now() + (6.048e+8 * 2) )= 从今天开始 2 周的日期对象

于 2018-11-10T06:29:46.810 回答
6

您正在分配date1一个 Date 对象,它代表您传递给它的字符串。您在acceptLicense值中看到的是toString()日期对象的表示(尝试alert(date1.toString())查看此内容)。

要根据需要输出,您必须使用字符串连接和各种Date方法

var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();

增加 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();

NB JavaScript 中的月份是 0 索引的(1 月 = 0,12 月 = 11),因此 +1是月份。

编辑:为了解决您的评论,您应该date按如下方式构造,因为Date参数应该是“表示 RFC2822 或 ISO 8601 日期的字符串”。(见这里)。

var segments = acceptCompletionDate.split("/");
var date1 = new Date(segments[2], segments[1], segments[0]);
于 2012-07-05T12:10:09.617 回答
1
var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));

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

于 2019-08-02T12:05:17.530 回答
0

要使用 14 解析特定dd/mm/yyyy格式并增加天数,您可以执行拆分部分的操作,并使用指定的 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

}
于 2012-07-05T12:30:31.940 回答
0

这应该可以满足您的需求。

function LicenceToOccupy(acceptCompletionDate)
{
    var date1 = new Date(acceptCompletionDate);
    date1.setDate(date1.getDate() + 14);
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
于 2012-07-05T12:10:30.147 回答
0

只需对 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();
}
于 2016-07-05T19:26:07.553 回答
-1

一切都在那里

 date1.toLocaleDateString() 

这将在客户端约定中将 date1 作为字符串返回

要创建一个多 2 周的新日期 date2(2 周 = 2*7*24*60*60 秒):

 var date2 = new Date(date1 + 60*60*24*7*2);
于 2012-07-05T12:14:47.620 回答