检查日期是今天、昨天还是过去 7 天内

问题描述 投票:0回答:9

我知道这个线程:优雅地检查给定日期是否是昨天
但我只是专门寻找 JavaScript 解决方案。如果可以的话短一点。我实在找不到一个100%可靠的方法..

到目前为止我就是这样做的:

function FormatDate(someDtUTC) {
    var someDt = new Date(someDtUTC.getTime() + someDtUTC.getTimezoneOffset() * 60 * 1000);
    var dtNow = new Date();
    if (dtNow.getUTCFullYear() == someDt.getUTCFullYear() && dtNow.getUTCMonth() == someDt.getUTCMonth()) {
        if (dtNow.getUTCDate() == someDt.getUTCDate())
            var dateString = "Today, " + Ext.Date.format(someDt, 'G:i'); // Today, 15:32
        else if (dtNow.getUTCDate() - 1 == someDt.getUTCDate())
            var dateString = "Yesterday, " + Ext.Date.format(someDt, 'G:i'); //Yesterday, 13:26
        else if (dtNow.getUTCDate() - someDt.getUTCDate() < 7)
            var dateString = Ext.Date.format(someDt, 'l, G:i'); //Sunday, 14:03
    } else
        var dateString = Ext.Date.format(someDt, 'j.n.y\, G:i'); //7.8.15, 8:25
    return dateString;
}

不要担心

Ext.Date.format()
函数,它不是问题的一部分。

该代码的问题是,它无法处理以下情况:

Today: 01.08.15  
Yesterday: 31.07.15 

知道如何告诉函数也处理这个问题吗?
我不是在寻找带有外部库(包括 ExtJS)的解决方案。我想用原始 JavaScript 来解决这个问题。

javascript date time
9个回答
13
投票

如果您想打印今天、昨天,显示星期几,如果当前年份显示不带年份的日期,如果上一年则显示带年份的日期,下面的代码将帮助您。

var fulldays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];


function formatDate(someDateTimeStamp) {
    var dt = new Date(someDateTimeStamp),
        date = dt.getDate(),
        month = months[dt.getMonth()],
        timeDiff = someDateTimeStamp - Date.now(),
        diffDays = new Date().getDate() - date,
        diffMonths = new Date().getMonth() - dt.getMonth(),
        diffYears = new Date().getFullYear() - dt.getFullYear();

    if(diffYears === 0 && diffDays === 0 && diffMonths === 0){
      return "Today";
    }else if(diffYears === 0 && diffDays === 1) {
      return "Yesterday";
    }else if(diffYears === 0 && diffDays === -1) {
      return "Tomorrow";
    }else if(diffYears === 0 && (diffDays < -1 && diffDays > -7)) {
      return fulldays[dt.getDay()];
    }else if(diffYears >= 1){
      return month + " " + date + ", " + new Date(someDateTimeStamp).getFullYear();
      }else {
        return month + " " + date;
      }
}

formatDate(Date.now()) //"Today"
formatDate(Date.now() - 86400000) // "Yesterday"
formatDate(Date.now() - 172800000) // it will return the name of the week if it is beyond two days

6
投票

好的,我们可以按照以下步骤进行:

  1. 获取两个日期的
    Date()
    对象。
  2. 使用
    .setTime()
    将时间设置为两者的特定时间。
  3. 使用
    .getTime()
    ,计算毫秒。
  4. 计算两个日期的时间。
  5. 检查以下情况:
    1. 如果差异是
      86400000
      ,那就是昨天。
    2. 如果差值是
      86400000
      的倍数,则为天数。

JavaScript 代码

var a = new Date(2015, 8 - 1, 25);  // Today
var b = new Date(2015, 8 - 1, 24);  // Yesterday
var c = new Date();                 // Now

c.setHours(0);
c.setMinutes(0);
c.setSeconds(0, 0);

if (a.getTime() == c.getTime())
  return "Today";
else if (b.getTime() == c.getTime())
  return "Yesterday";
else if ((new Date(2015, 8 - 1, 25 - 7)).getTime() < c.getTime())
  return "Less than a week";

4
投票

我基于@Kapilrc 源代码构建。语言变量应该对 toLocaleString() 有效。享受吧!

function create_human_friendly_date(
  timestamp,
  yesterday_text,
  today_text,
  tomorrow_text,
  language
) {
  var in_the_last_7days_date_options = { weekday: 'long'};
  var in_the_next_7days_date_options = { month: 'short', day: 'numeric' };
  var same_year_date_options = { month: 'short', day: 'numeric' };
  var far_date_options = { year: 'numeric', month: 'short', day: 'numeric' };

  var dt = new Date(timestamp);
  var date = dt.getDate();
  var time_diff = timestamp - Date.now();
  var diff_days = new Date().getDate() - date;
  var diff_months = new Date().getMonth() - dt.getMonth();
  var diff_years = new Date().getFullYear() - dt.getFullYear();

  var is_today = diff_years === 0 && diff_months === 0 && diff_days === 0;
  var is_yesterday = diff_years === 0 && diff_months === 0 && diff_days === 1;
  var is_tomorrow = diff_years === 0 && diff_months === 0 && diff_days === -1;
  var is_in_the_last_7days = diff_years === 0 && diff_months === 0 && (diff_days > 1 && diff_days < 7);
  var is_in_the_next_7days = diff_years === 0 && diff_months === 0 && (diff_days < -1 && diff_days > -7);
  var is_same_year = diff_years === 0;

  if(is_today){
    return today_text;
  }else if(is_yesterday) {
    return yesterday_text;
  }else if(is_tomorrow) {
    return tomorrow_text;
  }else if(is_in_the_last_7days) {
    return dt.toLocaleString(language, in_the_last_7days_date_options);
  }else if(is_in_the_next_7days) {
    return dt.toLocaleString(language, in_the_next_7days_date_options);
  }else if(is_same_year){
    return dt.toLocaleString(language, same_year_date_options);
  }else{
    return dt.toLocaleString(language, far_date_options);
  }
}

console.log(create_human_friendly_date(Date.now(), "Yesterday", "Today", "Tomorrow", "en")); // Today

console.log("***********************************");

console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 1), "Yesterday", "Today", "Tomorrow", "en")); // Yesterday
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 2), "Yesterday", "Today", "Tomorrow", "en")); // 2 days ago
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 10), "Yesterday", "Today", "Tomorrow", "en")); // 10 days ago
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 900), "Yesterday", "Today", "Tomorrow", "en")); // Some years ago

console.log("***********************************");

console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 1), "Yesterday", "Today", "Tomorrow", "en")); // Tomorrow
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 2), "Yesterday", "Today", "Tomorrow", "en")); // In 2 days
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 10), "Yesterday", "Today", "Tomorrow", "en")); // In 10 days
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 900), "Yesterday", "Today", "Tomorrow", "en")); // In some years


1
投票
  1. 你为什么不尝试这样的事情
  2. 7 天前您也可以这样做:

    export function isToday(date, now) {
      const yearDate = date.getYear();
      const monthDate = date.getMonth();
      const dayDate = date.getDate();
      const yearNow = now.getYear();
      const monthNow = now.getMonth();
      const dayNow = now.getDate();
      if (yearDate === yearNow && monthDate === monthNow && dayDate === 
        dayNow) {
        return true
      }
      return false
    }
    

1
投票

这对我有用:

  private _isSameDay(date1: Date, date2: Date): boolean {
    return (
      date1.getUTCFullYear() === date2.getUTCFullYear() &&
      date1.getMonth() === date2.getMonth() &&
      date1.getDate() === date2.getDate()
    );
  }

  private _getSeparatorBody(date: Date): string {
    if (this._isSameDay(date, new Date())) {
      return 'Today';
    }
    const yesterday = new Date();
    yesterday.setDate(yesterday.getDate() - 1);
    if (this._isSameDay(date, yesterday)) {
      return 'Yesterday';
    }
    return date.toISOString();
  }

1
投票

这对我有用。

const generatingDates = () => {
  let dates = {
    today: null,
    yesterday: null,
    oneDayBeforeYesterday: null,
    twoDayBeforeYesterday: null,
    threeDayBeforeYesterday: null,
    fourDayBeforeYesterday: null,
    fiveDayBeforeYesterday: null,
  };
 
  let keys = Object.keys(dates);
 
  keys.map((x) => {
    prev = null;
    if (prev === null && dates[x] === null) {
      dates[x] = new Date();
      prev = dates[x];
    } else if (value === null && prev !== null) {
      dates[x] = prev;
    }
  });
 
  return dates;
};
 
function findDay(date) {
  let dateToCheck = new Date(date);
 
  const datesDict = generatingDates();
  //   console.log(datesDict);
 
  datesDict.yesterday.setDate(datesDict.yesterday.getDate() - 1);
  datesDict.oneDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 1);
  datesDict.twoDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 2);
  datesDict.threeDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 3);
  datesDict.fourDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 4);
  datesDict.fiveDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 5);
 
  let days = [
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
  ];
 
  if (dateToCheck.toDateString() === datesDict.today.toDateString()) {
    return "Today";
  } else if (
    dateToCheck.toDateString() === datesDict.yesterday.toDateString()
  ) {
    return "Yesterday";
  } else if (
    dateToCheck.toDateString() ===
    datesDict.oneDayBeforeYesterday.toDateString()
  ) {
    return days[date.getDay()];
  } else if (
    dateToCheck.toDateString() ===
    datesDict.twoDayBeforeYesterday.toDateString()
  ) {
    return days[date.getDay()];
  } else if (
    dateToCheck.toDateString() ===
    datesDict.threeDayBeforeYesterday.toDateString()
  ) {
    return days[date.getDay()];
  } else if (
    dateToCheck.toDateString() ===
    datesDict.fourDayBeforeYesterday.toDateString()
  ) {
    return days[date.getDay()];
  } else if (
    dateToCheck.toDateString() ===
    datesDict.fiveDayBeforeYesterday.toDateString()
  ) {
    return days[dateToCheck.getDay()];
  } else {
    return dateToCheck;
  }
}

0
投票

您可以使用此函数并将您的日期作为参数传递,它将返回星期几,7 天后它将返回给定日期。

function findDay(date) {
    let dateToCheck = new Date(date);
    
    const today = new Date();
    const yesterday = new Date(today);
    const oneDayBeforeYesterday = new Date(yesterday);
    const twoDayBeforeYesterday = new Date(yesterday);
    const threeDayBeforeYesterday = new Date(yesterday);
    const fourDayBeforeYesterday = new Date(yesterday);
    const fiveDayBeforeYesterday = new Date(yesterday);

    yesterday.setDate(yesterday.getDate() - 1);
    oneDayBeforeYesterday.setDate(yesterday.getDate() - 1);
    twoDayBeforeYesterday.setDate(yesterday.getDate() - 2);
    threeDayBeforeYesterday.setDate(yesterday.getDate() - 3);
    fourDayBeforeYesterday.setDate(yesterday.getDate() - 4);
    fiveDayBeforeYesterday.setDate(yesterday.getDate() - 5);

    let days = [
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
    ];

    if (dateToCheck.toDateString() === today.toDateString()) {
        return "Today";
    } else if (dateToCheck.toDateString() === yesterday.toDateString()) {
        return "Yesterday";
    } else if (dateToCheck.toDateString() === oneDayBeforeYesterday.toDateString()) {
        return days[date.getDay()];
    } else if (dateToCheck.toDateString() === twoDayBeforeYesterday.toDateString()) {
        return days[date.getDay()];
    } else if (dateToCheck.toDateString() === threeDayBeforeYesterday.toDateString()) {
        return days[date.getDay()];
    } else if (dateToCheck.toDateString() === fourDayBeforeYesterday.toDateString()) {
        return days[date.getDay()];
    } else if (dateToCheck.toDateString() === fiveDayBeforeYesterday.toDateString()) {
        return days[dateToCheck.getDay()];
    } else {
        return dateToCheck;
    }
}

console.log(findDay("07-10-2020"));


0
投票

检查日期是否是今天的函数

function isToday(date) {
    const today = new Date();
    return date.getDate() === today.getDate() &&
           date.getMonth() === today.getMonth() &&
           date.getFullYear() === today.getFullYear();
}

检查日期是否是昨天的日期的函数

function isYesterday(date) {
    const yesterday = new Date();
    yesterday.setDate(yesterday.getDate() - 1);
    return date.getDate() === yesterday.getDate() &&
           date.getMonth() === yesterday.getMonth() &&
           date.getFullYear() === yesterday.getFullYear();
}

检查日期是否是明天的功能

function isTomorrow(date) {
    const tomorrow = new Date();
    tomorrow.setDate(tomorrow.getDate() + 1);
    return date.getDate() === tomorrow.getDate() &&
           date.getMonth() === tomorrow.getMonth() &&
           date.getFullYear() === tomorrow.getFullYear();
}

使用示例

const inputDate = new Date('2024-02-19');

if (isToday(inputDate)) {
    console.log("The date is today.");
} else if (isYesterday(inputDate)) {
    console.log("The date is yesterday.");
} else if (isTomorrow(inputDate)) {
    console.log("The date is tomorrow.");
} else {
    console.log("The date is neither today, yesterday, nor tomorrow.");
}

-1
投票

您可以使用两个日期之间的日期差异,如果有负值,它将返回天数差异

var date1 = new Date("12/15/2010");
var date2 = new Date("12/14/2010");
var timeDiff = date2.getTime() - date1.getTime();
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
if(diffDays == -1){ alert("Yesterday")}
© www.soinside.com 2019 - 2024. All rights reserved.