MomentJS日期字符串添加5天

257
我有一个起始日期字符串“20.03.2014”,想要使用moment.js加5天,但弹出窗口中没有显示新的日期“25.03.2014”。
以下是我的javascript代码:

我有一个起始日期字符串“20.03.2014”,想要使用moment.js加5天,但弹出窗口中没有显示新的日期“25.03.2014”。

以下是我的javascript代码:

startdate = "20.03.2014";
var new_date = moment(startdate, "DD-MM-YYYY").add("DD-MM-YYYY", 5);

alert(new_date);

这是我的 jsfiddle: http://jsfiddle.net/jbgUt/1/

我该如何解决这个问题?

我喜欢这种字符串格式 "25.03.2014"。

希望有人能帮助我。

11个回答

518

更新时间:2016年1月19日

从2.8.4版本开始,使用.add(5, 'd')(或者.add(5, 'days'))来替代.add('d', 5)

var new_date = moment(startdate, "DD-MM-YYYY").add(5, 'days');

感谢 @Bala 提供的信息。

更新时间:2014年3月21日

这是要获得那种格式的方法。

这里是更新后的演示

startdate = "20.03.2014";
var new_date = moment(startdate, "DD-MM-YYYY").add('days', 5);

var day = new_date.format('DD');
var month = new_date.format('MM');
var year = new_date.format('YYYY');

alert(day + '.' + month + '.' + year);

翻译: 2014年3月20日

您没有告诉它要添加哪个/哪种单位。请使用-

 var new_date = moment(startdate, "DD-MM-YYYY").add('days', 5);

我想在警告窗口中看到这种格式“25.03.2014”,我该如何实现? - Dave
3
截至版本2.8.4,我能看到使用add('days',5)的过时信息。请改用add(5,'days')。 - Bala
2
正确的语法是:moment().add(5, 'days').format("D/M/YYYY") 您可以在此处查看更多信息:https://momentjs.com/docs/#/manipulating/add/ - Costas Bakoulias
@Bala,如果只需要添加一天,我们可以使用add(1,“day”)吗? - Aashiq
@Ashiq,根据文档,应该是“days”或“d”。(虽然“day”以d开头可以工作,但不应使用) - Bala

35
moment(moment('2015/04/09 16:00:00').add(7, 'd').format('YYYY/MM/DD HH:mm:ss'))

需要格式化,然后再转换为 moment 格式。


2
你节省了我很多时间 : ) - نرم افزار حضور و غیاب

27

add()函数返回旧日期,但更改原始日期 :)

startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days');
alert(new_date);

11
是的,这很奇怪。在控制台中检查moment(startdate).add(5,'days')时,你会得到Moment {_isAMomentObject: true, _i:" [原始日期] "},我确信add方法没有起作用。花了几分钟之后,我意识到方法确实起作用了,因为如果你打开对象,你会发现Moment _d : [添加后的日期] _f : “YYYY-MM-DDTHH:mm:ss” _i : [原始日期] ... 日期实际上已经改变了(你可以使用moment(startdate).add(5,'days').format('YYYYMMDD')`获得正确的结果),但是这似乎使���困惑,它看起来好像日期没有改变。:-| - Gilad Barner

27

您可以以不同的格式添加天数:

// Normal adding
moment().add(7, 'days');

// Short Hand
moment().add(7, 'd');

// Literal Object    
moment().add({days:7, months:1});

查看 Moment.js 文档了解更多: https://momentjs.com/docs/#/manipulating/add/


19
var end_date = moment(start_date).clone().add(5, 'days');

3
确实是 clone() 在这里起到了真正的帮助作用。 - ChrisW
谢谢你救了我的一天!! clone() 非常重要,因为根据文档add() 会改变原始的 moment。 - Calios

18

如果我们想要使用当前日期:

var new_date = moment(moment(), "MM-DD-YYYY").add(7, 'days')
alert(new_date);


6
如果在将 X 时间添加到函数后出现格式问题,可以尝试使用以下格式: startDate = moment(startDate).add(1, "days").format("YYYY-MM-DD"); 而不是: startDate = moment(startDate, "YYYY-MM-DD").add(1, "days"); 最后这个版本保留了返回的数据中的时间,而 format 方法则不会并且只会字面上返回 YYYY-MM-DD。

4
  1. https://momentjs.com/downloads/moment-with-locales.js添加到您的HTML页面中。
  2. var todayDate = moment().format('DD-MM-YYYY');//获取今天日期 06/03/2018 如果您想要在当前日期上增加额外的一天
  3. var dueDate = moment().add(15,'days').format('DD-MM-YYYY')// 在当前日期上添加15天...

点2和3是在您的jQuery代码中使用的...


4
为了得到一个实际的工作示例,返回预期结果,需要进行以下操作:
var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
var thing = new_date.add(5, 'days').format('DD/MM/YYYY');
window.console.log(thing)

3

你可以用几行代码来简化他们的说法:

var nowPlusOneDay = moment().add('days', 1);
var nowPlusOneDayStr = nowPlusOneDay.format('YYYY-MM-DD');

alert('nowPlusOneDay Without Format(Unix Date):'+nowPlusOneDay);
alert('nowPlusOneDay Formatted(String):'+nowPlusOneDayStr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接