如果年份大于 currentYear,是否可以替换文本?

is there away to replace a text if the year is greater than the currentYear.?

如果年份大于 currentYear,我想将 "was on " 替换为 "will be "

let myDate = new Date();
const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
const currentYear = myDate.getFullYear();
let tense = 'was on';
for(let year= 2020; year <= 2030; year++){
    let d = new Date(year, 4, 27);
    if(d.getDate() === 27 && d.getMonth() === 4 ){
        const output = `my birthday in ${year} ${tense} ${days[d.getDay()]}`;
        console.log(output)
    }
}

但是当我包含 if 语句时,它没有返回任何内容 - 没有错误,没有结果。

给你:)

let myDate = new Date();
   const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
   const currentYear = myDate.getFullYear();
   let tense = 'was on';
   for(let year= 2010; year <= 2030; year++){
    
    if (parseInt(currentYear) < parseInt(year)) {tense = 'will be on';}
    let d = new Date(year, 4, 27);
    if(d.getDate() === 27 && d.getMonth() === 4 ){  
      const output = `my birthday in ${year} ${tense} ${days[d.getDay()]}`; 
       console.log(output)
    } 
}

这可以使用 javascript 中的三元运算符。

const ripe = true;  
const egg = ripe===true? "GOOD" :"BAD";

在此处阅读更多内容 (https://www.javascripttutorial.net/javascript-ternary-operator/)

   let myDate = new Date();
   const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
   const currentYear = myDate.getFullYear();
   let tense1 = 'was on';
   let tense2 = "will be"
   
   for(let year= 2020; year <= 2030; year++){
        let d = new Date(year, 4, 27);
        if(d.getDate() === 27 && d.getMonth() === 4 ){  
           // If year>currentYear then(?) tense1 else(:) tense2
           const preTense = parseInt(year)>parseInt(currentYear)? tense1 : tense2;
           
           const output = `my birthday in ${year} ${preTense} ${days[d.getDay()]}`; 
    
           console.log(output)
        } 
   }

let myDate = new Date();
   const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
   const currentYear = myDate.getFullYear();
   let tense = 'was on';
   for(let year= 2020; year <= 2030; year++){
    let d = new Date(year, 4, 27);
    if(d.getDate() === 27 && d.getMonth() === 4 ){  
       
      if(year < currentYear){
        const output = `my birthday in ${year} ${tense} ${days[d.getDay()]}`;
        console.log(output)
      }else{
       let tense = 'will be';
       const output = `my birthday in ${year} ${tense} ${days[d.getDay()]}`;
       console.log(output)
      }
    } 
}

试试这个:

const days = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
];
const now = new Date();
const currentYear = now.getFullYear();

for(let year= 2020; year <= 2030; year++){
    const d = new Date(year, 4, 27);
    const tense = year > currentYear ? 'will be'
      : year === currentYear ? 'is'
      : 'was';
    const dayOfWeek = days[d.getDay()];

    if(d.getDate() === 27 && d.getMonth() === 4 ){
        const output = `my birthday in ${year} ${tense} on ${dayOfWeek}`;
        console.log(output)
    }
}

理想情况下,您应该尽可能使用 const。这也是使用三元运算符而不是 if/else-statement.

的绝好机会

您还可以通过先确定三个值之间的时态——pastpresentfuture,然后使用这些值来获得desired 输出语句的不同部分所需的实际时态值。然后,不用在末尾使用 if/else,您可以只使用一个 console.log 语句,让不同的情况由时态处理。

我的示例将时态分为两组,一组用于当天,另一组用于我添加的附加年龄声明。为了这个例子,我将生日设置为当前日期,因此您可以看到 present 时态的作用,其中输出行将显示为 My birthday in 2021 is today, on Friday, and I am 31 years old.

实际情况如下:

从出生年份迭代到 100 年后

const now = new Date(),
      [currentYear, currentMonth, currentDate] = [now.getFullYear(), now.getMonth(), now.getDate()],
      bday = new Date(1990, currentMonth, currentDate),
      [bdayYear, bdayMonth, bdayDate] = [bday.getFullYear(), bday.getMonth(), bday.getDate()],
      currentAge = currentYear - bdayYear - (
        (bdayMonth < currentMonth ||
          (bdayMonth === currentMonth && bdayDate <= currentDate)
        ) ? 0 : 1
      ),
      days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
      tenses = {
        date: {
          past: 'was on a',
          present: 'is today,',
          future: 'will be on a'
        },
        age: {
          past: 'was',
          present: 'am',
          future: 'will be'
        }
      },
      _bday = new Date(bday); // cloning bday to avoid mutating the original bday date
for (let year = bdayYear; year <= bdayYear + 100; year++) {
  _bday.setFullYear(year);
  const [ month, date, day ] = [ _bday.getMonth(), _bday.getDate(), days[_bday.getDay()] ],
        previousBday = new Date(year - 1, month, date),
        age = year - bdayYear,
        dateTense =
          year < currentYear ||
          (year === currentYear &&
            (month < currentMonth ||
              (month === currentMonth && date < currentDate)
            )
          )
            ? 'past'
            : year === currentYear && month === currentMonth && date === currentDate
              ? 'present'
              : 'future',
        dateTenseString = tenses.date[dateTense],
        ageTense = age === currentAge ? 'present' : (dateTense === 'present' ? 'past' : dateTense),
        ageTenseString = tenses.age[ageTense];
  document.body.innerHTML += `<span class="${ageTense}">My birthday in <b>${year}</b> ${dateTenseString} <b>${day}</b>, and I ${ageTenseString} <b>${age} years old</b>.</span>`;
}
body {
  display: flex;
  flex-direction: column;
  margin: 0;
  font-family: Arial, sans-serif;
  font-size: 14px;
}
span { padding: 5px 10px; }
span:first-of-type { padding-top: 10px; }
span:last-of-type { padding-bottom: 10px; }
span.past {
  background-color: #f8bbd0;
  color: #880e4f;
}
span.present {
  background-color: #d1c4e9;
  color: #311b92;
  border-top: 1px solid #311b92;
  border-bottom: 1px solid #311b92;
}
span.future {
  background-color: #bbdefb;
  color: #0d47a1;
}
b { font-size: 120%; }

此功能还会智能地将您的年龄与您计算出的当年年龄进行比较,因此如果您的生日已经过了今年,它仍然会使用 I am 时态而不是 I was紧张。同样,如果你的生日在当年还没到,那么上一年的年龄用I am时态,今年的年龄用I will be.

您也可以将其构建为一个表单,如下所示:

作为交互形式

const inputDob = document.getElementById('dob'),
      inputYear = document.getElementById('year'),
      output = document.getElementById('output'),
      now = new Date(),
      [currentYear, currentMonth, currentDate] = [now.getFullYear(), now.getMonth(), now.getDate()],
      days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
      tenses = {
        date: {
          past: 'was on a',
          present: 'is today,',
          future: 'will be on a'
        },
        age: {
          past: 'was',
          present: 'am',
          future: 'will be'
        }
      };
const calculateAge = () => {
  const year = Number(inputYear.value),
        bdayParts = inputDob.value.split('-').map((e,i) => Number(e) - (i === 1 ? 1 : 0)),
        bday = new Date(...bdayParts),
        [bdayYear, bdayMonth, bdayDate] = [bday.getFullYear(), bday.getMonth(), bday.getDate()],
        currentAge = currentYear - bdayYear - (
          (bdayMonth < currentMonth ||
            (bdayMonth === currentMonth && bdayDate <= currentDate)
          ) ? 0 : 1
        );
  bday.setFullYear(year);
  const [ month, date, day ] = [ bday.getMonth(), bday.getDate(), days[bday.getDay()] ],
        previousBday = new Date(year - 1, month, date),
        age = year - bdayYear,
        dateTense =
          year < currentYear ||
          (year === currentYear &&
            (month < currentMonth ||
              (month === currentMonth && date < currentDate)
            )
          )
            ? 'past'
            : year === currentYear && month === currentMonth && date === currentDate
              ? 'present'
              : 'future',
        dateTenseString = tenses.date[dateTense],
        ageTense = age === currentAge ? 'present' : (dateTense === 'present' ? 'past' : dateTense),
        ageTenseString = tenses.age[ageTense];
  output.innerHTML = `<span class="${ageTense}">In <b>${year}</b>, my birthday ${dateTenseString} <b>${day}</b>, and I ${ageTenseString} <b>${age} years old</b>.</span>`;
};
calculateAge();
document.addEventListener('input', calculateAge);
body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  font-family: Arial, sans-serif;
  font-size: 14px;
}
span { margin-top: 0px; }
b { font-size: 120%; }
<label>My birthdate is <input id="dob" type="date" value="1990-01-01" placeholder="mm/dd/yyyy"></label>
<label>What was my birthday in the year <input id="year" type="number" value="2000"></label>
<span id="output"></span>