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

For*_*vin 5 javascript time date

我知道这个线程:优雅地检查给定的日期是否是昨天
但我只是专门寻找一个 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;
}
Run Code Online (Sandbox Code Playgroud)

不要担心Ext.Date.format()功能,这不是问题的一部分。

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

Today: 01.08.15  
Yesterday: 31.07.15 
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*man 5

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

  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";
Run Code Online (Sandbox Code Playgroud)


Kap*_*lrc 5

如果你想打印今天,昨天,显示星期几,如果是当前年份,则显示没有年份的日期,如果是前一年,则显示日期与年份,下面的代码会帮助你。

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
Run Code Online (Sandbox Code Playgroud)

  • 昨天的情况怎么样...我认为应该检查“diffMonths”,否则昨天就是昨天,同年其他月份的同一天也会返回昨天。 (2认同)