最近工作相关项目有些功能写了/搜集了一些日期时间相关处理的函数,做个笔记
Javescript / Python
日期格式化相关
- 输入时间戳(number)或其他字符串格式的日期,会转化成年月日形式输出日期,默认分隔符为‘-’
1
2
3
4
5
6
7let 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
7let 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
18let 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
19let 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
21let 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
14import 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