每年直接从用户输入之日起存储

时间:2017-08-15 05:07:38

标签: javascript momentjs

您好,我需要每年直接从用户进入商家的日期开始存储,问题是每次添加一年都会在日和月之间插入。

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"

2 个答案:

答案 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'));
 }