【问题标题】:How can I compare two dates and return years or days depending on difference?如何比较两个日期并根据差异返回年份或日期?
【发布时间】:2019-09-03 15:35:39
【问题描述】:

我有这个问题。我想将 TODAY 与日期(月、日、年)进行比较,并以天或年为单位返回年龄,具体取决于差异是小于 1 年(返回天数)还是大于(返回年)。

我得到奇怪的结果。

这是我的代码:

function tellAge(month, day, year) {
	var d = new Date();
	var years = d.getFullYear()-year;
	var days = d.getDay()-day; 

	if ((d.getFullYear()-year)>1) {
		return "You are " + days + " days old"
	} else {
		return "You are " + years + " year old"
	}
 }

tellAge(3,11,2017)

这个:tellAgeTest(3,11,2017) 应该返回

你2岁了

但没有。

【问题讨论】:

  • 看看你的 if 语句。你说的是if years > 1 return days old。你把它翻了。在这种情况下应该做年份声明。还有一个挑剔的,您将年份计算到您的 years 变量中,但您没有使用它。让你的 if 语句if(years > 1)。当您得到不正确的结果时,以供将来参考,请发布您得到的结果。在不知道错误是什么的情况下很难帮助解决大多数问题
  • 它返回了什么?
  • "你已经 -9 天了"

标签: javascript function date


【解决方案1】:

即使您修复了比较运算符,您的代码也不起作用。

在您当前的代码中,您要从输入的日期(在我的示例中为 1 月 17 日的 17)中减去 d.getDay(),即当月中的某天(9 月 3 日为 3)。如果两个日期都在同一个月,这将起作用,但如果您希望它在几个月内工作,您必须计算两个日期之间的天数,而不仅仅是一个月中的天数之间的差异。

function tellAge(month, day, year) {
  var today = new Date();
  var birthday = new Date(year, month-1, day);
  var days = (today - birthday) / (1000 * 60 * 60 * 24);
  
  if (days < 365) {
    return "You are " + Math.floor(days) + " days old"
  } else {
    return "You are " + Math.floor(days/365) + " years old"
  }
}

console.log(tellAge(1, 17, 2019));
console.log(tellAge(3, 11, 2017));

【讨论】:

  • 你能帮我想一想吗:“如果你使用的日期少于一年,那么你只是从当月的那天开始计算输入的月份的日期”与 _________
  • 另外,由于月份是从 0-11 计算的,因此您是否扣除了第 1 个月?
  • @user2132380 - 我已经编辑了答案以使其更加清晰。是的,月份索引为零,因此 -1.
  • 我可以再问一件事吗?你在这里计算什么var days = (today - birthday) / (1000 * 60 * 60 * 24); 都是以毫秒为单位的日期(今天和生日)?如果是,我假设您要将其转换为秒 (/1000),然后转换为分钟 (/60),然后转换为小时 (/60),然后转换为天 (/24)。所以毫秒数表示为天,对吧?我只是很困惑,因为今天的结果是这样的 Wed Sep 04 2019 12:05:08 GMT+0200 (Central European Summer Time) 而不是几毫秒
  • @user2132380 - 你的假设是完全正确的。日期对象在控制台中显示为字符串(如 Wed Sep 04 2019 12:05:08 GMT+0200),但由于 javascript 为 loosly typed,您可以使用它进行数学运算,计算机将自动将日期对象转换为milliseconds since unix epoch time的数字。
【解决方案2】:

你的比较是倒退的。您应该检查小于 1 不大于 1。像这样:

function tellAge(month, day, year) {
  var d = new Date();
  var years = d.getFullYear() - year;
  var days = d.getDay() - day;

  if ((d.getFullYear() - year) < 1) { // This comparison was backwards
    return "You are " + days + " days old"
  } else {
    return "You are " + years + " year old"
  }
}

【讨论】:

  • 这是错误的。试试tellAge(1, 17, 2019)。它将从 3 中减去 17,因为现在是 9 月 3 日,这没有任何意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 2017-07-15
  • 1970-01-01
相关资源
最近更新 更多