js 根据开始日期和期限来计算结束日期

qq_33079425 2018-04-25 02:29:42
总共有4个栏位:
开始日期,期限,单位,求结束日期?
比如1:2018-02-10 3,月,2018-05-09 (结束日期减1天)
比如2:2018-02-10 7,天,2018-02-16 (结束日期减1天)

根据开始日期,期限,单位来计算结束日期。
当开始日期大于结束日期时,给个提示。

烦请高手用js函数的方式帮忙实现,请考虑是否闰年及一三五七八十腊等。
不胜感谢。
...全文
4153 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
风中的少年 2018-04-28
  • 打赏
  • 举报
回复
使用moment来处理日期。这已经是一个相当强大的日期处理函数了。
qq_33079425 2018-04-27
  • 打赏
  • 举报
回复
引用 5 楼 dulongfie 的回复:
[quote=引用 4 楼 qq_33079425 的回复:] [quote=引用 1 楼 dulongfie 的回复:] 这个意思?

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	开始日期:<input type="date" id="startTime"><br />
	期限:<input type="text" id="num">
		<select id="type">
			<option value="1">天</option>
			<option value="2">月</option>
		</select><br />
	<button onclick="calc()">计算</button>
	<div id="result"></div>

	<script>
		function calc(){
			var startTime = document.querySelector('#startTime').value;
			var num = document.querySelector('#num').value * 1;
			var type = document.querySelector('#type').value;

			if(startTime && num && type){
				startTime = startTime.replace(/-/g,'/');
				var date = new Date(startTime);

				if(type == 1){
					date.setDate(date.getDate() + num);
				}else{
					date.setMonth(date.getMonth() + num);
				}

				date.setDate(date.getDate()-1);
				document.querySelector('#result').innerHTML = date.toLocaleString();
			}
		}
	</script>
</body>
</html>
你好,您这个生成的日期是这样的格式 2018年04月15日 00:00:00 ,能否帮忙转成这种2018-04-15,我搞了半天没搞出来,麻烦帮忙转一下,谢谢。 [/quote]

document.querySelector('#result').innerHTML = date.toLocaleString();
//改成
document.querySelector('#result').innerHTML = date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate();
//或者
document.querySelector('#result').innerHTML = date.toLocaleString().replace(//g,'');
[/quote]按第2个方法,好像可以了,不能直接替换
qq_33079425 2018-04-27
  • 打赏
  • 举报
回复
引用 6 楼 dulongfie 的回复:
//上边的正则写掉了, document.querySelector('#result').innerHTML = date.toLocaleString().replace(/^(.*)(日\s00:00:00)$/g,'$1').replace(/[年月]/g,'-')
您这个方法在某台电脑是可以,但是每台电脑格式不一样的就麻烦了。按照你这个方式换台电脑变成这样了2018-5-16日 星期三 0:00:00
roffer 2018-04-27
  • 打赏
  • 举报
回复
//上边的正则写掉了, document.querySelector('#result').innerHTML = date.toLocaleString().replace(/^(.*)(日\s00:00:00)$/g,'$1').replace(/[年月]/g,'-')
roffer 2018-04-27
  • 打赏
  • 举报
回复
引用 4 楼 qq_33079425 的回复:
[quote=引用 1 楼 dulongfie 的回复:] 这个意思?

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	开始日期:<input type="date" id="startTime"><br />
	期限:<input type="text" id="num">
		<select id="type">
			<option value="1">天</option>
			<option value="2">月</option>
		</select><br />
	<button onclick="calc()">计算</button>
	<div id="result"></div>

	<script>
		function calc(){
			var startTime = document.querySelector('#startTime').value;
			var num = document.querySelector('#num').value * 1;
			var type = document.querySelector('#type').value;

			if(startTime && num && type){
				startTime = startTime.replace(/-/g,'/');
				var date = new Date(startTime);

				if(type == 1){
					date.setDate(date.getDate() + num);
				}else{
					date.setMonth(date.getMonth() + num);
				}

				date.setDate(date.getDate()-1);
				document.querySelector('#result').innerHTML = date.toLocaleString();
			}
		}
	</script>
</body>
</html>
你好,您这个生成的日期是这样的格式 2018年04月15日 00:00:00 ,能否帮忙转成这种2018-04-15,我搞了半天没搞出来,麻烦帮忙转一下,谢谢。 [/quote]

document.querySelector('#result').innerHTML = date.toLocaleString();
//改成
document.querySelector('#result').innerHTML = date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate();
//或者
document.querySelector('#result').innerHTML = date.toLocaleString().replace(//g,'');
qq_33079425 2018-04-27
  • 打赏
  • 举报
回复
引用 1 楼 dulongfie 的回复:
这个意思?

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	开始日期:<input type="date" id="startTime"><br />
	期限:<input type="text" id="num">
		<select id="type">
			<option value="1">天</option>
			<option value="2">月</option>
		</select><br />
	<button onclick="calc()">计算</button>
	<div id="result"></div>

	<script>
		function calc(){
			var startTime = document.querySelector('#startTime').value;
			var num = document.querySelector('#num').value * 1;
			var type = document.querySelector('#type').value;

			if(startTime && num && type){
				startTime = startTime.replace(/-/g,'/');
				var date = new Date(startTime);

				if(type == 1){
					date.setDate(date.getDate() + num);
				}else{
					date.setMonth(date.getMonth() + num);
				}

				date.setDate(date.getDate()-1);
				document.querySelector('#result').innerHTML = date.toLocaleString();
			}
		}
	</script>
</body>
</html>
你好,您这个生成的日期是这样的格式 2018年04月15日 00:00:00 ,能否帮忙转成这种2018-04-15,我搞了半天没搞出来,麻烦帮忙转一下,谢谢。
风中的少年 2018-04-25
  • 打赏
  • 举报
回复
<html> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/moment.js/2.22.1/moment.min.js"></script> <body> 总共有4个栏位: 开始日期,期限,单位,求结束日期? 比如1:2018-02-10 3,月,2018-05-09 (结束日期减1天) 比如2:2018-02-10 7,天,2018-02-16 (结束日期减1天) <hr> <div id="end-date"></div> </body> </html> <script> function getEndDate(start, num, unit) { if(unit === '天') return moment(start).add(num, 'd'); if(unit === '月') return moment(start).add(num, 'months'); } $('#end-date').text(moment(getEndDate('2018-04-15', 3, '月')).format('YYYY-MM-DD')); // 以此类推, </script>
天际的海浪 2018-04-25
  • 打赏
  • 举报
回复

function getEndDate(sd,n,g) {
	var d = new Date(sd);
	switch (g) {
		case "月":
			var td = d.getDate();
			d.setMonth(d.getMonth()+n);
			if (td != d.getDate())
				d.setDate(0);
			break;
		case "天":
			d.setDate(d.getDate()+n);
		break;
	}
	d.setDate(d.getDate()-1);
	return d.toLocaleString().replace(/ .+/,"");
}
alert(getEndDate("2018-02-10",3,"月"));
alert(getEndDate("2018-02-10",7,"天"));

roffer 2018-04-25
  • 打赏
  • 举报
回复
这个意思?

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	开始日期:<input type="date" id="startTime"><br />
	期限:<input type="text" id="num">
		<select id="type">
			<option value="1">天</option>
			<option value="2">月</option>
		</select><br />
	<button onclick="calc()">计算</button>
	<div id="result"></div>

	<script>
		function calc(){
			var startTime = document.querySelector('#startTime').value;
			var num = document.querySelector('#num').value * 1;
			var type = document.querySelector('#type').value;

			if(startTime && num && type){
				startTime = startTime.replace(/-/g,'/');
				var date = new Date(startTime);

				if(type == 1){
					date.setDate(date.getDate() + num);
				}else{
					date.setMonth(date.getMonth() + num);
				}

				date.setDate(date.getDate()-1);
				document.querySelector('#result').innerHTML = date.toLocaleString();
			}
		}
	</script>
</body>
</html>
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2018-04-25 02:29
社区公告
暂无公告