2012-07-05 48 views
12

Javascript绝对不是我最强的一点。我已经尝试了几个小时,现在似乎陷入了日期格式化的地方。如何使用javascript添加数周到日期?

我有一个表格,用户选择一个日期(日/月/年),然后这个日期将被采取和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; 

} 
+0

我喜欢[即ANS](http://stackoverflow.com/a/7751977/1509853) – oCcSking 2016-03-02 08:57:48

回答

3

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

要输出你想要的,你必须使用字符串连接和various Date methods

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

N.B月在JavaScript是0索引(一月= 0,DEC = 11),因此+1上的月份。

编辑:为了解决您的意见,您应该构建date作为替代如下,作为Date说法应该是“代表RFC2822或ISO 8601日期的字符串。” (see here)。

var segments = acceptCompletionDate.split("/"); 
var date1 = new Date(segments[2], segments[1], segments[0]); 
+0

感谢您的响应,如果我选择'04/01/2012' (DD/MM/yyyy)我在另一个领域得到的价值是'15/4/2012'(dd/mm/yyyy),所以它似乎仍然是14个月而不是一天,或更多只是格式化在某个地方仍然是错误的。 – JBoom 2012-07-05 12:21:05

+0

我想在添加14天之前需要格式化吗?因为(date1.getDate()+ 14)假定其格式为mm/dd/yyyy – JBoom 2012-07-05 12:24:53

+0

@JBoom:'Date'参数应该是“表示RFC2822或ISO 8601日期的字符串”。 ([见这里](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse))。使用接受年份,月份,日期作为单独参数的其他构造函数可能会更好(请参阅我编辑的答案)。 – Matt 2012-07-05 12:25:58

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(); 
} 
42

你可以这样做:

var now = new Date(); 
now.setDate(now.getDate()+14); 
alert(now); 

你可以看到小提琴here

按照documentation in MDN

的的setDate()方法按照本地时间设置月份中的日期在指定日期 。

+0

@Jasper - 你能给我一个失败的例子吗?我在我的答案中给出了代码的链接。 – 2014-09-08 11:29:23

-1

全部的there

date1.toLocaleDateString() 

Thiswill回报你日期1作为客户约定

字符串,创建2周以上(2周= 2 * 7 * 24 * 60 * 60秒)的新日期,日期2:

var date2 = new Date(date1 + 60*60*24*7*2); 
+0

这就是['toLocaleDateString'](http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.6)**应该做的,但它不适用于所有浏览器(例如Chrome忽略我的系统设置,就像最近的版本一样,但不是当前版本的Firefox)。 – RobG 2012-10-30 05:34:46

0

要解析特定的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 

} 
0

只是一些最低限度的修改来敬酒的答案,你会得到你正在寻找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(); 
}