关于日期时间相关处理的函数(js/py)

最近工作相关项目有些功能写了/搜集了一些日期时间相关处理的函数,做个笔记
Javescript / Python

日期格式化相关

  • 输入时间戳(number)或其他字符串格式的日期,会转化成年月日形式输出日期,默认分隔符为‘-’
    1
    2
    3
    4
    5
    6
    7
    let formatTime = function(time,spliter = '-') {
    let date = new Date(time);
    let year = date.getFullYear();
    let month = (date.getMonth() + 1) >= 10 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1);
    let day = date.getDate() >= 10 ? date.getDate() : '0' + date.getDate();
    return `${year}${spliter}${month}${spliter}${day}`
    }

日期计算相关

  • 输入两日期d1&d2,计算d1-d2两天数相差的天数

    1
    2
    3
    4
    5
    6
    7
    let getDateDeltaDays = function(d1, d2) {
    // return d2 - d1
    var a1 = Date.parse(new Date(d1));
    var a2 = Date.parse(new Date(d2));
    var day = parseInt((a2-a1)/ (1000 * 60 * 60 * 24));// 时间戳相减,然后除以天数
    return day
    }
  • 输入日期start_date与天数day,计算从start_date起day天后的日期

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    let getDay = function(start_date, day) {
    function doHandleMonth(month){ // month若为个位数则前面加0
    var m = month;
    if(month.toString().length == 1){
    m = "0" + month;
    }
    return m;
    };
    var start_date = new Date(start_date)
    var targetday_milliseconds=start_date.getTime() + 1000*60*60*24*day;
    start_date.setTime(targetday_milliseconds); //注意,这行是关键代码
    var tYear = start_date.getFullYear();
    var tMonth = start_date.getMonth();
    var tDate = start_date.getDate();
    tMonth = doHandleMonth(tMonth + 1);
    tDate = doHandleMonth(tDate);
    return tYear+"-"+tMonth+"-"+tDate;
    }

分割 / 范围

  • 输入一个日期范围start_date ~ end_date,将按照divideDays的天数将日期范围分割,默认30天分割

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    let divideDateRangeList = function(start_date, end_date, divideDays=30) {
    let result = []
    start_date = start_date === null ? null:start_date
    end_date = end_date === null ? null:end_date
    if(!start_date || !end_date) return result
    if(getDateDeltaDays(start_date, end_date)+1 <= divideDays) result.push({start: start_date, end: end_date})
    else {
    start = start_date
    while(getDateDeltaDays(start, end_date)+1 > divideDays) {
    end = getDay(start, divideDays)
    tmp = {start:start, end:end}
    result.push(tmp)
    start = getDay(end, 1)
    }
    tmp = {start: start, end: end_date}
    result.push(tmp)
    }
    return result
    }
  • 输入一个日期范围start_date ~ end_date(需按照‘年-月-日’格式),将返回包含期间所有日期的列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    let getDateRange = function(start_date,end_date) {
    range_list = []

    start_date = start_date ? start_date: null
    end_date = end_date ? end_date: null

    if(!start_date || !end_date) return range_list

    start_date = start_date.split('-')
    end_date = end_date.split('-')
    start_date = new Date(start_date[0], start_date[1]-1, start_date[2]).getTime()
    end_date = new Date(end_date[0], end_date[1]-1, end_date[2]).getTime()

    for(let i = start_date; i<= end_date;) {
    range_list.push(formatTime(i, '-'))
    i += 24*60*60*1000
    }

    return range_list
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import datetime

    def rangeDate(start, end):
    result = []
    start_date = datetime.datetime.strptime(start, '%Y-%m-%d')
    end_date = datetime.datetime.strptime(end, '%Y-%m-%d')
    step = datetime.timedelta(days=1)

    while start_date!=end_date:
    result.append(str(start_date.date()))
    start_date += step
    result.append(end)
    return result