【问题标题】:How to loop through the remaining days of the year and look for certain dates in javascript?如何遍历一年中剩余的日子并在javascript中查找某些日期?
【发布时间】:2015-08-16 06:58:43
【问题描述】:

我有 3 个人的生日:

史蒂夫 -> 5 月 3 日

马克 -> 10 月 20 日

罗宾 -> 12 月 5 日

如何遍历一年中剩余的日子并找出哪个人还有生日(在本例中输出 MARK AND ROBBIN)?

我已经能够获取一年中的剩余天数,但我不确定如何循环遍历一年中的剩余天数 并输出那些人的名字(那些将在接下来的几个月里有生日的人)。 这是我到目前为止所做的:

我创建了一个函数来获得重新命名的日子:

function remainingDays(date1, date2) {
// The number of milliseconds in one day
var ONE_DAY = 1000 * 60 * 60 * 24

var date1_ms = date1.getTime()
var date2_ms = date2.getTime()

var difference_ms = Math.abs(date1_ms - date2_ms)

// Convert back to days and return
return Math.round(difference_ms/ONE_DAY)
}

如您所见,该函数返回剩余天数。这是价值观:

var current_date = new Date()

// Store the date of the next New Year's Day
var new_years_date = new Date()
new_years_date.setYear(new_years_date.getFullYear() + 1)
new_years_date.setMonth(0)
new_years_date.setDate(1)

// Call the remainingDays function
var days_left = remainingDays(current_date, new_years_date);

if (days_left > 1) {
document.write(days_left + " days left this year")
} else {
 document.write(days_left + " day left this year")
 }

请帮帮我....谢谢你!

【问题讨论】:

  • 为什么是java和c++标签?
  • 请不要在问题中添加不相关的标签。

标签: javascript


【解决方案1】:

这样的事情呢? (见jsfiddle):

var birthdays = [
  {
    name: 'Mark',
    date: 'October 20'
  },
  {
    name: 'Robbin',
    date: 'December 5'
  }
];

var upcoming = birthdays.filter(function(person) {
  var date = new Date(person.date + ' 2015');

  // returns a boolean "true" or "false"
  return date > new Date();
});

console.log(upcoming);

如果生日大于今天的日期,它只是将当前生日过滤到一个新数组upcoming 中。无需过于复杂。

如果您愿意,可以使其更具语义性和可扩展性:

var upcoming = birthdays.filter(afterToday);

function afterToday(person) {
  return new Date(person.date + ' 2015') > new Date();
}

编程的一个关键范式是越简单越好。许多算法可以做同样的事情(最终得到相同的结果),但通常更简单的算法更好,其他一切都相同。

换句话说:

  1. 算法可以遍历一年中剩余的每个日期,或者

  2. 算法可以简单地检查日期是否大于今天

我认为第二个更简单。此外,代码行数更少,可读性更高。

【讨论】:

    【解决方案2】:

    您可以为每个人设置一个变量并检查他的生日是否即将到来

    var Mark = new Date(2015, 9, 20);
    var now = new Date()
    
    if(Mark > now){
    doSomething()
    }
    

    【讨论】:

      【解决方案3】:

      不要循环,

      计算儒略日期(某日期的儒略日期是一年中某天的序号,例如32是2月1日的儒略日期,见https://en.wikipedia.org/wiki/Julian_day

      然后看看当前的儒略日是大于还是小于任何生日儒略日

      【讨论】:

      • 根据您的答案中引用的维基百科页面,儒略日是自儒略时期开始以来的天数,即公元前 4713 年。这不是从任何一年的 1 月 1 日开始的订单天数
      • 糟糕,在金融、信用卡行业,他们使用我在说 Julian date 时给出的定义 :)
      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多