0

我有一个字符串,其日期格式为:dd-mm-yyyy

如何在字符串中添加 4 周,然后使用 jQuery / Javascript 生成新字符串?

我有

var d = new Date(current_date); 
d.setMonth(d.getMonth() + 1); 
current_date_new = (d.getMonth() + 1 ) + '-' + d.getDate() + '-' + d.getFullYear();    
alert(current_date_new); 

但它抱怨提供的字符串格式不正确

4

4 回答 4

2

编辑:经过一番摆弄,这是解决方案:

首先,将字符串拆分为各个部分。

var inputString = "12-2-2005";
var dString = inputString.split('-');

然后,将字符串解析为 datetime 对象并为其添加 28 天(4 周)。

var dt = new Date(dString[2],dString[1]-1,dString[0]);
dt.setDate(dt.getDate()+28);

最后,您可以输出日期

var finalDate = dt.GetDate() + "-" + (dt.GetMonth()+1) + "-" + dt.GetYear();

此代码应返回12-3-2005.

注意事项:似乎 JavaScript 的 Date 对象将 0-11 作为月份字段,因此代码中的月份为 -1 和 +1。

EDIT2:要进行填充,请使用此功能:

function pad(number, length) {

    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }

    return str;

}

并将您的输出更改为

var finalDate = pad(dt.GetDate(),2) + "-" + pad(dt.GetMonth()+1,2) + "-" + dt.GetYear();

检查更新的小提琴。

于 2012-06-07T14:01:44.443 回答
0

无需转换为 mm-dd-yyyy,通过减号简单拆分字符串并使用以下代码创建新的 Date 对象:

var string = '12-02-2012';
var split = string.split('-');
var date = Date(split[2],parseInt(split[1])-1,parseInt(split[0])+1)

date.setDate(date.getDate() + 28);
var fourWeeksLater = date.getDay() + "-"+date.getMonth() +"-"+date.getYear();
于 2012-06-07T14:16:22.510 回答
0

我不会为日期编写自己的解析器,而是使用moment.js

解析您的日期:

var date = moment('14-06-2012', 'DD-MM-YYYY');

增加4 周:

date.add('weeks', 4);

或者一口气:

var date = moment('14-06-2012', 'DD-MM-YYYY').add('weeks', 4);

并将其转换为字符串:

var dateString = date.format('DD-MM-YYYY');
于 2012-06-14T09:55:45.300 回答
0

这应该有效:

var formattedDate = '01-01-2012',
    dateTokens = formattedDate.split('-'),
    dt = new Date(dateTokens[2], parseInt( dateTokens[1], 10 ) - 1, dateTokens[0]), // months are 0 based, so need to add 1
    inFourWeeks = new Date( dt.getTime() + 28 * 24 * 60 * 60 * 1000 );

jsfiddle:http: //jsfiddle.net/uKDJP/

编辑:

使用Globalize,您可以格式化 inFourWeeks:

Globalize.format( inFourWeeks, 'dd-MM-yyyy' ) // outputs 29-01-2012
于 2012-06-07T14:33:35.683 回答