【问题标题】:javascript add number of months to specific date format [duplicate]javascript将月数添加到特定日期格式[重复]
【发布时间】:2019-07-13 10:06:19
【问题描述】:

我当前的日期格式是30-Dec-2018。我想在此日期格式中添加 2 个月(可能会更改),因此我的输出将是 2019 年 2 月 28 日。我尝试了几次this,但没有成功。

我认为我的日期格式导致生成正确输出时出现问题。在 javascript 中为上述日期格式添加一个月的任何帮助。谢谢

P.S:添加日期也可能会改变年份

编辑:

var date= new Date(30-Dec-2018);
var month_add  = date.setMonth(date.getMonth()+2);
    alert(month_add);

我在警报框中得到的输出是:1553022000000

【问题讨论】:

  • 格式不是问题。将其解析为 Date 对象,然后格式无关紧要。你可以做你的计算。然后如果需要再次显示,以正确的格式输出。特定格式仅适用于人类。计算机在处理日期时不会使用它们或关心它们。
  • 无论如何,尚不清楚为什么您链接到的问题中的解决方案对您不起作用。也许如果您发布您尝试过的代码,我们可以帮助您修复它。
  • 你看过像moment.js这样的日期时间库吗?
  • 从 12 月 30 日到 2 月 28 日有两个月吗?你对一个月的定义是什么?
  • 我写了一个 sn-p 来为你解析你的日期格式,但是当我在那个日期加上两个月时,我得到 March 2,从 12 月 30 日开始的两个月似乎应该是 2 月之后的两天28 日,确实是 3 月 2 日。

标签: javascript date


【解决方案1】:

您可以将该日期字符串解析为 yearmonth_indexday 组件,以便您可以将 Date constructor 与它们一起使用,使用 Date 方法添加两个月,然后将其格式化回字符串:

const input = '30-Dec-2018';

console.log( add_two_months( input ) );

function add_two_months ( input ) {
  const date = parse_date_string( input ); 
  date.setMonth( date.getMonth( ) + 2 );
  return format_date( date );
}

// Expects input in form '30-Dec-2018'
function parse_date_string ( str ) { 
  const [ , day, month_str, year ] = input.match( /(\d*)-(\w*)-(\d*)/ );

  const month_index = { 
    jan: 0,
    feb: 1,
    mar: 2,
    apr: 3,
    may: 4,
    jun: 5,
    jul: 6,
    aug: 7,
    sep: 8,
    oct: 9,
    nov: 10,
    dec: 11,
  }[ month_str.toLowerCase( ) ];

  return new Date( year, month_index, day );
}

function format_date ( date ) {
  const day = date.getDate( ).toString( ).padStart( 2, '0' );
  
  const month = [
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
  ][ date.getMonth( ) ];
  
  const year = date.getFullYear( );
  
  return `${day}-${month}-${year}`;
}

如果您使用 ISO 8601 日期/时间格式(出于多种原因,我强烈推荐该格式),则可以全部简化为:

const input = '2018-12-30';

console.log( add_two_months( input ) );

function add_two_months ( input ) {
  const date = new Date( input );
  date.setMonth( date.getMonth( ) + 2 );
  return date.toISOString( ).substr( 0, 10 );
}

【讨论】:

  • @MuhammadAsifRaza 不客气
  • 这个答案并没有告诉 OP 他们为什么会遇到问题。
猜你喜欢
  • 2012-09-29
  • 2013-07-14
  • 2012-12-19
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多