显示每月的第二个星期五-Javascript

时间:2020-04-02 21:07:39

标签: javascript html date

我正在制作一个显示食品储藏室下一个日期的网页。它发生在每月的第二个星期五。我从this question获取了当前代码,并且我认为可以对其进行修改以满足自己的需求。但是,我希望它以“ 4月10日”格式显示,而不是“ 04/10/2020”。我对Java语言有非常基本的了解,因此,如果您像我五岁那样来解释它,将会很有帮助。

此外,如果第二个星期五是当天,那么如果能说今天,那就太好了。

谢谢!

Date.prototype.nextsecondFriday = function (){
            // Load the month.
            var target = new Date(this.getFullYear(), this.getMonth(), 1, 0, 0, 0);
            var today = new Date();

            // Check to see if the 1st is on a Friday.
            var isFriday = (target.getDay() == 1);

            // Jump ahead two weeks from the 1st, and move back the appropriate number of days to reach the preceding Friday.
            // i.e. If the 1st is a Thursday, we would move back three days.
            var targetDate = 12 - (target.getDay() - 1);

            // Quick adjustment if the 1st is a Friday.
            if (isFriday) targetDate -= 4;

            // Move to the second Friday in the month.   
            target.setDate(targetDate);

            // Second Friday is before today's date, so find the second Friday next month.
            if (today > target) {
                //return "<em>" + target.toLocaleDateString() + " is in the past...</em>";
                target.setMonth(target.getMonth() + 1);
                return target.nextsecondFriday();
            }

            // Format and return string date of second Friday.
            return target.toLocaleDateString();
        }
        
        var secondFridayDateString = new Date().nextsecondFriday();

        document.getElementById("dynamicdate").innerHTML = secondFridayDateString;
<p>Our next food pantry is <span id="dynamicdate">Second Friday</span>.</p>

5 个答案:

答案 0 :(得分:0)

尝试新的Intl.DateTimeFormat('en-US',options).format(target)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat

Date.prototype.nextsecondFriday = function (){
            // Load the month.
            var target = new Date(this.getFullYear(), this.getMonth(), 1, 0, 0, 0);
            var today = new Date();

            // Check to see if the 1st is on a Friday.
            var isFriday = (target.getDay() == 1);

            // Jump ahead two weeks from the 1st, and move back the appropriate number of days to reach the preceding Friday.
            // i.e. If the 1st is a Thursday, we would move back three days.
            var targetDate = 12 - (target.getDay() - 1);

            // Quick adjustment if the 1st is a Friday.
            if (isFriday) targetDate -= 4;

            // Move to the second Friday in the month.   
            target.setDate(targetDate);

            // Second Friday is before today's date, so find the second Friday next month.
            if (today > target) {
                //return "<em>" + target.toLocaleDateString() + " is in the past...</em>";
                target.setMonth(target.getMonth() + 1);
                
                return target.nextsecondFriday();
            }
            let options = { year: 'numeric', month: 'long', day: 'numeric' };

            // Format and return string date of second Friday.
            return new Intl.DateTimeFormat('en-US', options).format(target);
        }
        
        var secondFridayDateString = new Date().nextsecondFriday();

        document.getElementById("dynamicdate").innerHTML = secondFridayDateString;
<p>Our next food pantry is <span id="dynamicdate">Second Friday</span>.</p>

答案 1 :(得分:0)

我将修改nextsecondFriday函数以返回日期对象而不是格式化的字符串(只需删除toLocaleDateString()调用)。

然后编写另一个函数formatDate,该函数接收日期并返回格式化的字符串。

然后调用nextsecondFriday获取日期并使用formatDate对其进行格式化。

用于格式化的代码(formatDate函数),如果您需要特定的格式(冒号和'th'等),可能类似于:

const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
const monthOptions = { month: 'long' };
const dayOptions = { day: 'numeric' };
const formattedDate = event.toLocaleDateString('en-US', monthOptions) + ', ' + event.toLocaleDateString('en-US', dayOptions));
// then check event.getDay() and append 'st', 'nd', 'rd' or 'th' to formattedDate as needed

但是,如果您可以使用其他格式,那么只需一次调用toLocaleDateString就足够了-检查toLocaleDateString documentation on MDN以获得详细信息。

答案 2 :(得分:0)

请参见toDateString 您只需要更改此语句

 return target.toDateString();

答案 3 :(得分:0)

options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
secondFridayDateString.toLocaleDateString("en-us", options)

您需要设置格式,检查一下。

您可以在控制台中执行以下操作:

let date = new Date()
options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
date.toLocaleDateString("en-us", options) //set your locale as you want i.e. es-ar or any locale

答案 4 :(得分:0)

以下代码找到任何Date()的第二个星期五

Date.prototype.nextsecondFriday = function() {
  // get second firday for given month and year
  const secondFriday = (year, month) => {
    // first day of the month
    let date = new Date(year, month, 1);
    let dayDifference = 5 - date.getDay();

    // get second friday of the month
    if (dayDifference < 0) {
      date.setDate(date.getDate() + (14 + (-1 * dayDifference)));
    } else if (dayDifference >= 0) {
      date.setDate(date.getDate() + 7 + dayDifference);
    }

    return date;
  };

  // format date to "April 10th"
  const formatDate = (date) => {
    const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    const month = months[date.getMonth()];
    const day = date.getDate();
    let suffix = 'th';
    const j = day % 10,
      k = day % 100;

    if (j == 1 && k != 11) {
      suffix = "st";
    } else if (j == 2 && k != 12) {
      suffix = "nd";
    } else if (j == 3 && k != 13) {
      suffix = "rd";
    }
    return `${month} ${day}${suffix}`;
  };


  let date = this;
  let closestSecondSaturday;
  do {
    let secondFridayOfThisMonth = secondFriday(date.getFullYear(), date.getMonth());
    if (secondFridayOfThisMonth.getDate() === date.getDate()) {
      closestSecondSaturday = "Today";
    } else if (secondFridayOfThisMonth.getDate() >= date.getDate()) {
      closestSecondSaturday = formatDate(secondFridayOfThisMonth);
    } else {
      // if current date has crossed the second friday, move to the next month
      date.setMonth(date.getMonth() + 1);
    }
  } while (!closestSecondSaturday)
  return closestSecondSaturday;
};

// sample call
document.write(new Date().nextsecondFriday());