试图计算日期之间的月份数

时间:2015-10-16 06:44:30

标签: javascript jquery date

我正在尝试计算两个日期之间的月数,但我的脚本正在抛出错误

   var month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

   $('#test1').click(function () {

       date1_month = '29-10-2015';
       date2_month = '29-12-2015';
       var i = 0;
       while (date1_month <= date2_month) {
           var next_month = new Date(date1_month);
           next_month.setDate(date1_month.getDate() + month[date1_month.getUTCMonth()]);
           i = i + 1;
           date1_month = next_month;
       }
       $('.months').html(i);

   });

JSFIDDLE

当我点击按钮时,它会进入不结束循环,我猜不会抛出任何错误。

谢谢

4 个答案:

答案 0 :(得分:2)

您可以使用日期作为日期而不是使用字符串来存储日期来尝试此操作:

var date1_month  = new Date(2015, 10, 29); 
var date2_month  = new Date(new Date(2015, 12, 29));
var total_months = (date2_month.getFullYear() - date1_month.getFullYear())*12 + (date2_month.getMonth() - date1_month.getMonth());
alert(total_months);

<强> JSFIDDLE DEMO

答案 1 :(得分:0)

第一次通过你的循环,你的&#34;而#34;声明正在比较两个字符串...此后,您将实际日期与字符串进行比较......

也许您可以先将两个初始日期转换为实际的Date对象(就像在循环中一样)然后进行比较。

答案 2 :(得分:-1)

这是一个更简单的出路:

@Entity
@Table(name="user")  
public class User {

  @ID
  public Long id;

  @Column(name="userCode")
  public String userCode;

  @OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name = "user_id")
  public List<Address> addressList;

  ....
}

@Entity
@Table(name="address")  
public class Address {

  @Id
  @Column(name = "id")
  public Long id;

  @Column(name="userId")
  public Long userId;

  @Column(name="address-line-1")
  public String addressLine1;

  @Column(name="address-line-2")
  public String addressLine2;

  @OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name = "address_id")
  protected List<Phone> phoneList;

  ....
}

@Entity
@Table(name="phone")
public class Phone {

  @Id
  @Column(name = "id")
  public Long id;

  @Column(name="contact_no")
  public String contactNo;

  @Column(name="country_code")
  public int countryCode;

  @Column(name="address_id")
  public int addressId;

  ....
}

以下是代码中发生的步骤:

1)var month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; $('#test1').click(function () { date1_month = '29-10-2015'; date2_month = '29-12-2015'; var m1 = date1_month.match(/-(.*?)-/); var m2 = date2_month.match(/-(.*?)-/); var i = Math.abs(m1[1]-m2[1]); $('.months').html(i); }); 是变量,用于存储m1的月份。由于date1的月份在两个连字符之间,因此使用正则表达式来提取它。

2)同样,创建变量date1来存储m2

个月

4)创建一个变量date2,用于存储两个月的差异。

以下是fiddle

<强> 注:

我不确定你是否只想要一年中不同的月份之间的差异,或者你是否想要考虑年份的差异。请澄清:)

答案 3 :(得分:-1)

如果您想使用momentjs

date1_month = '29-10-2015';
date2_month = '29-12-2015';
date1 = moment(date1_month, 'DD-MM-YYYY');
date2 = moment(date2_month, 'DD-MM-YYYY');

var diffMonths = Math.abs(date1.diff(date2, 'months'));