检查日期是否大于一个月的第一周结束日期

时间:2016-03-07 10:56:59

标签: javascript

我正在检查日期是否大于第一周的结束日期。

对此有更好的方法吗?

我还需要检查时间和日期。

function getTodayDate() {
  var today = new Date();
  var dd = today.getDate();
  var mm = today.getMonth() + 1; //January is 0!
  var yyyy = today.getFullYear();

  if (dd < 10) {
    dd = '0' + dd
  }

  if (mm < 10) {
    mm = '0' + mm
  }

  today = dd + '/' + mm + '/' + yyyy;

  return today;
}

function getFirstWeekDate() {
  var today = new Date();
  var dd = "7";
  var mm = today.getMonth() + 1; //January is 0!
  var yyyy = today.getFullYear();

  if (dd < 10) {
    dd = '0' + dd
  }

  if (mm < 10) {
    mm = '0' + mm
  }

  return dd + '/' + mm + '/' + yyyy;
}

var startDate = getTodayDate();
var endDate = getFirstWeekDate();

var regExp = /(\d{1,2})\/(\d{1,2})\/(\d{2,4})/;

if (parseInt(endDate.replace(regExp, "$3$2$1")) < parseInt(startDate.replace(regExp, "$3$2$1"))) 
{

}

1 个答案:

答案 0 :(得分:2)

您的方法存在一些问题。

首先,您实际上并没有查看周末的日期。您只是将其与第七天进行比较,因此您确实要检查日期是否是该月的前六天之一,并且有更好的方法来检查(例如调用{{1 }})。

其次,您试图将日期视为一个数字,但是将最重要的数字(年份)放在最后,这与他们应该如何排序相反。这适用于您的特定练习,因为在这种情况下月份和年份将始终相同,但如果您实际比较任何两个日期则错误。如果你包括时间,那就特别错了。在这种情况下,您有两个更好的解决方案

  1. 将您的日期转换为(tz一致或tz免费)ISO 8601日期,这些日期将正确排序。您可以使用getDate()的{​​{1}}方法执行此操作。

  2. 使用Moment.js等库来进行日期操作和比较。

  3. 例如,如果您在toISOString()中有一个Date对象,则可以使用

    创建表示此对象的Moment对象
    Date

    然后您可以将其用于各种操作和比较。例如,如果您想要由nowMoment表示的月份的周末,您可以执行以下操作以获取月份的开头,然后是第一周的结束

    now

    然后你可以比较这些。因此,如果您想知道var nowMoment = moment(now); 变量是否在第一周结束之前,您可以使用类似

    的内容
    var weekEnd = moment(now).startOf('month').endOf('week');