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

标签 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"

最佳答案

这是一个微妙的错误!根据当前文档 https://momentjs.com/docs/#/displaying/ .calendar() 使用默认日期格式,可能使用环境的区域设置(如果未提供),因此这里看起来默认为 MM/DD/YYYY ,而不是所需的 DD/MM/YYYY。因此,在第一次迭代中,dateStart 被转换为 12/03/2010,并交换了月份和日期。然后在下一次迭代中,它会再次转换回 DD-MM-YYYY ,并交换日期和月份,然后再次传递给 .calendar() 时,日期和月份再次交换,再次给出正确的格式。

一个潜在的错误是您将 dateStart 从字符串更改为 moment 对象,因此我将重写代码,如下所示:

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

关于javascript - 直接从用户输入之日起每年存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686793/

相关文章:

javascript - 使用 momentJs 将本地时间转换为 CET

javascript - React 组件返回原始 HTML

javascript - 当我运行代码时如何处理 'auth/user-not-found'?

javascript - 找不到变量 : DS in Ember CLI

javascript - 无法在 chrome 扩展中获取对 es6 类的引用

javascript - MST 区域中的日期时间

javascript - 当从服务器的获取响应中排除时,删除属性 Backbone 模型

javascript - Moment.js 由周和工作日定义的两个时刻的差异给出了错误的结果

javascript - JSON.stringify如何自动将矩对象转换为iso字符串?

JavaScript - 转换日期和时间(Chart.js 和 Moment.js)