检查日期是否在两个日期之间

时间:2016-08-13 18:29:08

标签: javascript jquery

我有一个不同日期的数组,格式为年 - 月 - 日。

类似的东西:

var dates = ["2016-08-01", "2016-08-09", "2016-08-10", ....];

我还有一个函数,它以与上面相同的格式格式化今天的日期。并存储在变量中:

var currentDate; //Contains current date in the format of year-month-day

我需要做的是检查数组中是否有任何日期:

  • 与今天的日期相符.-例如今天是2016-08-13
  • 从今天起至今日14天。 - 例如从今天(2016-08-13)起14天后将是2016-07-30
  • 或与当前和14天之间的任何日期相匹配。

我试图通过遍历数组,检查每个值来做到这一点。但我不确定if条件/条件

    for(var i = 0; i < dates.length; i++) {
      if(currentDate === *condition*) {
        sendDate(dates[i]);
      } 
    }

任何人都有一个很好的解决方案吗?提前谢谢!

3 个答案:

答案 0 :(得分:2)

一种方法是将日期解析为毫秒值并进行比较。

var todayParts = currentDate.split('-');
var today = new Date(todayParts[0], todayParts[1], todayParts[2]).getTime();
var otherParts = dates[i].split('-');
var other = new Date(otherParts[0], otherParts[1], otherParts[2]).getTime();

if (today < other + 1209600000 /* 2 weeks in milliseconds */) {
    // The other date is less than 2 weeks before today
}

您可以阅读here为什么我手动解析它而不是使用Date.parse()

答案 1 :(得分:2)

首先,从currentDate创建一个新的Date()(currentDate是字符串格式Y-d-m,小时和分钟是00:00)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.nima.ts.MainActivity">

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        card_view:cardCornerRadius="4dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="135dp"
        android:layout_marginEnd="135dp">

    </android.support.v7.widget.CardView>
    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card"
        android:layout_gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        card_view:cardCornerRadius="4dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="119dp"
        android:layout_marginStart="119dp">

    </android.support.v7.widget.CardView>

</RelativeLayout>

只需遍历你的日期数组

var current = new Date(currentDate);
var matchWithCurrent = [];
var matchWithDayBack = [];
var between = [];

如果您只希望一个阵列与3个条件匹配,只需在一个for (var i=0; i<dates.length; i++) { var tmpDate = new Date(dates[i]); //Convert string to date var diff = Math.ceil((current - tmpDate) / (1000 * 3600 * 24)); //get time difference (current - tmpDate is milisecond, we need convert it to day) // Check condition and push it on array correct if (diff == 0) { matchWithCurrent.push(dates[i]); } if (diff == 14) { matchWithDayBack.push(dates[i]); } if ((diff > 0) && (diff <14)) { between.push(dates[i]); } } console.log(matchWithCurrent); console.log(matchWithDayBack); console.log(between); 中检查3个条件并将其推入if

答案 2 :(得分:0)

You can compare two dates something like that:
var currentDate = new Date();
 for(var i = 0; i < dates.length; i++) {<br>
 var arrDate = new Date(dates[i]);
    if(currentDate == arrDate)
    {//compare array dates with current date
        //your code here
    }
 var beforeDate = (currentDate.getDate() - 14); //14 days before
    if(arrDate >= beforeDate && arrDate <= currentDate){
        //compare dates between current date and 14 days before date
    } 
  }