【问题标题】:is there away to replace a text if the year is greater than the currentYear.?如果年份大于当前年份,是否可以替换文本?
【发布时间】:2021-12-19 03:31:55
【问题描述】:

如果年份大于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 语句时,它什么也不返回 - 没有错误,没有结果。

【问题讨论】:

  • 你能把不起作用的代码包括进来吗?
  • 如果有机会,请查看我的解决方案。我用更动态的三元设置替换了对 if/else 语句的需求,占pastpresent(今天)和future。我还添加了输出字符串的第二部分,它将输出您过去、现在或将来的年龄。

标签: javascript arrays loops if-statement replace


【解决方案1】:

理想情况下,您应该尽可能使用const。这也是使用三元运算符而不是 if/else 语句的绝佳机会。

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

我在这里的示例将时态分为两组,一组代表当天,一组代表我添加的附加年龄声明。为了这个示例,我将生日设置为当前日期,因此您可以看到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>

【讨论】:

    【解决方案2】:

    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)
          }
        } 
    }

    【讨论】:

    • 哇,谢谢,我这样做了,但我忘了添加 else 语句,我想这就是我既没有错误也没有输出的原因。
    • if (d.getDate() === 27 &amp;&amp; d.getMonth() === 4 ) { if 语句的目的是什么?您已经手动将日期和月份值设置为 274 的值,所以 if 语句不会总是计算为 true
    【解决方案3】:

    试试这个:

    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)
        }
    }
    
    

    【讨论】:

      【解决方案4】:

      给你:)

      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)
          } 
      }

      【讨论】:

      • 为什么是var,哦,为什么?
      • 快乐吗?嗯,生活很艰难
      • 我又得到了一个:你为什么要通过parseInt() 清理整数?它不会做任何事情。
      • 你为什么不写一些答案呢。你知道,帮助别人!
      • 非常感谢,上帝保佑你。已经卡了好几个小时了。
      【解决方案5】:

      这可以在 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)
              } 
         }
      

      【讨论】:

      • 谢谢,但这只是反之亦然,但已经修复了代码并且它工作得很好。再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-30
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多