您好,我需要每年直接从用户进入商家的日期开始存储,问题是每次添加一年都会在日和月之间插入。
var yearOnCompany = moment(user.fecha_ingreso_empresa, "YYYYMMDD").fromNow();
var dateStart = moment(user.fecha_ingreso_empresa).format("DD-MM-YYYY");
console.log(dateStart);
//03-12-2009
var f = parseInt(yearOnCompany);
var yearsOfWork = [];
for(var i = 1; i <= f; i++)
{
dateStart = moment(dateStart, "DD-MM-YYYY").add(1, 'years').calendar();
yearsOfWork.push(dateStart);
}
console.log(yearsOfWork);
结果:
0:"12/03/2010"
1:"03/12/2011"
2:"12/03/2012"
3:"03/12/2013"
4:"12/03/2014"
5:"03/12/2015"
6:"12/03/2016"
7:"03/12/2017"
答案 0 :(得分:0)
这是一个微妙的错误!根据文档https://momentjs.com/docs/#/displaying/ .calendar()
使用默认日期格式,可能使用环境的区域设置,如果没有提供,所以这里看起来它默认为MM/DD/YYYY
,而不是期望的DD/MM/YYYY
。因此,在第一次迭代dateStart
转换为12/03/2010
时,交换了月份和日期。然后在下一次迭代中,它又转换回DD-MM-YYYY
,再次交换日期和月份,然后再次传递给.calendar()
,再次交换日期和月份再次给出正确的格式。
一个潜在的错误是您将dateStart
从字符串更改为时刻对象,因此我会重写代码:
var dateStart = moment(user.fecha_ingreso_empresa).format("DD-MM-YYYY");
var f = parseInt(yearOnCompany);
var yearsOfWork = [];
for(var i = 1; i <= f; i++)
{
dateStart.add(1, 'years');
yearsOfWork.push(dateStart.format("DD-MM-YYYY"));
}
console.log(yearsOfWork);
答案 1 :(得分:0)
我认为你有格式问题,如果我错了,请纠正我。 请试试这个。
for(var i = 1; i <= f; i++)
{
dateStart = moment(dateStart , "DD-MM-YYYY").add(1, 'years');
yearsOfWork.push(dateStart.format('DD-MM-YYYY'));
}