繁体   English   中英

从 Javascript 中的月数、周数和日数获取日期

[英]Get Date from Month number, Week number and Day Number in Javascript

我正在尝试找到一种解决方案来从这些参数中获取日期(yyyy-MM-dd),例如:

  • 年份:2021
  • 月:2(二月)
  • 周:1(二月的第一周)
  • 天数:1(星期一)

你有什么想法吗?

谢谢:)

我已经这样做了,它不漂亮,但它有效

    //Parameters 
    var year = '2021',
    month = '11',
    week = '4',
    day = '5';

    gs.log(getDateForFloatingBusyDay(year, month, week, day));

function getDateForFloatingBusyDay(year, month, week, day) {

    if (month.length < 2) {
        month = '0' + month;
    }

    var arr_date = generateDaysForMonth(year, month);

    //Loop on generated date to match the first date that match the week number
    for (var x in arr_date) {

        var d = new Date(arr_date[x]);

        //if week number from input date match looking week number go trought
        if (getWeekOfMonth(d, true) == week) {
            var firstDayOfWeek = formatDateForSnow(arr_date[x]);

            //Monday = 2 in SNOW as we start on weeks on monday we substract 2
            day = parseInt(day) - 2;
            //add days to first day of week
            var gdt = new GlideDateTime(firstDayOfWeek);
            gdt.addDaysUTC(day);
            return gdt.getDate();

        }
    }


}


//Get week number for a date 
function getWeekOfMonth(date, exact) {
    var month = date.getMonth(),
        year = date.getFullYear(),
        firstWeekday = new Date(year, month, 1).getDay() - 1 //start on monday added -1
        ,
        lastDateOfMonth = new Date(year, month + 1, 0).getDate(),
        offsetDate = date.getDate() + firstWeekday - 1,
        index = 1 // start index at 0 or 1, your choice
        ,
        weeksInMonth = index + Math.ceil((lastDateOfMonth + firstWeekday - 7) / 7),
        week = index + Math.floor(offsetDate / 7);
    if (exact || week < 2 + index) return week;
    return week === weeksInMonth ? index + 5 : week;
};


//Generate day for current month 
function generateDaysForMonth(year, month) {
    var arr_days = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'];
    var arr_date = [];
    for (var x in arr_days) {

        arr_date.push([month, arr_days[x], year].join('/'));

    }

    return arr_date;
}


function formatDateForSnow(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2)
        month = '0' + month;
    if (day.length < 2)
        day = '0' + day;

    return [year, month, day].join('-');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM