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函数的方式帮忙实现,请考虑是否闰年及一三五七八十腊等。
不胜感谢。
...全文
4278 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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>
js大全 . 1.1 全是数字.. 3 1.2 限制 期限 不能大于 100 年.. 4 1.3 将日期格式由yyyy-MM-dd,转换为yyyymmdd,以直接比较两个日 期的大小.. 4 1.4 判断字符串是否全部由数字组成. 5 1.5 判断字符串是否全部由字母组成. 6 1.6 对于月和日,如果前面有零,去除,如 01 变为 1 .. 6 1.7 为 1 位的日月在前面补零,如将 1 变为 01 .. 7 1.8 在删除按钮的onclick事件触发.. 8 1.9 对输入控件的内容进行非空检验,如果为空,弹出提示信息.. 10 1.10 检验控件值是否是固定位数的有效数字 11 1.11 所输内容应为字母 12 1.12 过滤掉"'"、"%"、"&"、"/"、"" 13 1.13 删除字符串两侧的空格. 14 1.14 取字符串长度(不包含两端的空格) 14 1.15 清空查询条件.. 16 1.16 价格输入是否合法(99,999.00) 17 1.17 检验货票号为 1 位字母+6 位数字.. 17 1.18 检验起始货票号必须小于截至货票号. 18 1.19 检验查询条件是否为空,为空则提示"查询条件不能为空!" 19 1.20 检验是不是最短位数的数字,用于模糊查询. 20 1.21 输入为Decimal格式的数,且小数点前后都不能超过规定的位数 20 1.22 电话号码校验(只能为横线—、()、或数字) . 21 1.23 检测输入是否为正整数数字,如果结果为非给出相应提示. 22 1.24 避免多次提交页面 在jsp中嵌入该文件,在每个jsp页面的提交语23 1.25 检查EMail格式 23 1.26 电话号码由数字和-组成 24 1.26 检验输入的日期yyyy-MM-dd 27 1.27 去掉界面上开头的空格,过滤掉"'" 和""" . 33 1.29 去掉汉字间空格. 35 1.30 大小写转换 36 1.31 过滤掉"'"和""" . 36 1.32 清空查询条件.. 37 1.33 过滤掉"'"和"""和空格. 37 1.34 操作员代码为 7 位数字,密码最少为 4 位 .. 38 1.35 身份证为 15 或 18 位数字或字母 38 1.36 检验输入的时间段,日期格式yyyy-MM-dd 39 1.37 检验输入的时间段,日期格式yyyy-MM-dd 41 1.39 检查EMail格式是否正确.. 47 1.40 电话号码校验(只能为下划线—、()、或数字) 49 1.41 所输内容应为字母 50 1.41 所输内容不能非空 50 1.42 价格输入是否合法(99,999.00) 51 1.43 价格输入是否合法(99,999.00) 52 1.44 判断文本内容是否少于 2 个汉字/字符(js中汉字和字符占位一 样).. 53 1.45 检测输入是否只有字母或数字. 53 1.46 检测输入是否只有数字或不详,且输入数值不能过大(不能超过 32767).. 54 1.47 检测输入是否为数字.. 55 1.48 监测输入是否为数字,且所输入数值不能过大(不能超过 5 位 32767).. 56 1.49 检测输入是否为整形数字,且所输数值不能过大(不能超过 10 位 2147483647). 57 1.52 输入为Decimal格式的数,且小数点前后都不能超过规定的位数 /************************************ .. 59 1.53 可以为负数的数字,数值不能超过 5 位 32767 . 60 1.54 险情报告编号为四位年份加三位数字. 61 1.55 检验度数控制值是否是数字,并且小于或等于 180; /************************************ .. 62 1.56 删除字符串两侧的空格,返回的是删除两侧空格的字符串. 63 1.57 打开模式窗口,窗口居中 65 1.59 检验输入的时间段,日期格式yyyy-MM-dd 67 1.60 检验输入的日期yyyy-MM-dd 69 1.61 用下拉框显示月、日,日下拉框根据年月确定 73 1.62 检验租赁合同号为 4 位年份+2 位月份+本月合同的顺序号 2 位 75 1.63 用于多行校验,校验每一行,每一列值是否为空,传入的必须是 . 76 1.64 检查某列得多值中是否存在重复值.. 79 1.65 检查某列得多值与某一值得比较是否相同,例如多个到站路局与 一个发站路局是否相同 80 1.66 检查两多值列是否相同,例如同一行的装车路局是否与卸车站所 属路局是否相同 80 1.67 检查箱数与组数. 81 1.68 检查箱数与组数. 82 1.69 检查箱数与组数. 84 1.70 检查单列多值不能超过一定得长度.. 85 1.71 取字符串长度(不包含两端的空格 . 86 1.72 向表格中添加一行 86 1.73 将添加的输入框元素和Validator进行绑定。.. 89 1.74 根据标签展示的 的validator属性获取校验器类名(DecimalValidator) 91 1.75 删除一行. 92 1.76 根据箱型,校验箱数与组数的值是否符合规定 93 1.77 删除字符串两侧的空格. 95 1.78 检验单个集装箱箱号为 4 位字母+7 位数字. 95 1.79 检验多个集装箱箱号为 4 位字母+7 位数字. 97 1.80 检验单个集装箱箱号为'TBJU'+7 位数字用于租赁部分的箱号校验 .. 101 1.86 判断字符串是否全部由字母组成. 105 1.88 为 1 位的日月在前面补零,如将 1 变为 01 .. 107 1.90 检查EMail格式. 107 1.91 对输入控件的内容进行非空检验,如果为空,弹出提示信息. 109 1.92 检验控件值是否是固定位数的有效数字. 110 1.93 所输内容应为字母. 111 1.94 过滤掉"'"、"%"、"&"、"/"、"" . 112 1.95 取字符串长度(不包含两端的空格) . 113 1.96 将金额转化成按千分位的显示格式 114 1.97 清空查询条件 115 1.98 价格输入是否合法(99,999.00). 115 1.99 检验货票号为 1 位字母+6 位数字 116 2.00 检验起始货票号必须小于截至货票号.. 117 2.01 检验查询条件是否为空,为空则提示"查询条件不能为空!" . 118 2.02 检验是不是最短位数的数字,用于模糊查询.. 118 2.03 输入为Decimal格式的数,且小数点前后都不能超过规定的位数 .. 119 2.04 电话号码校验(只能为横线?、()、或数字) . 120 2.05(1)电话号码由数字和-组成 120 (2)电话号码为 7 到 13 位 . 120 (3)13 开头的头的手机号码必须为 11 位 120 2.06 检测输入是否为正整数数字,如果结果为非给出相应提示.. 121 2.07 避免多次提交页面 在jsp中嵌入该文件,在每个jsp页面的提交语句 前执行该方法.. 121 2.08 检查EMail格式. 122 2.09 电话号码由数字和-组成. 123 2.10 检验IP地址 . 124 2.11 校验忽略样式内容后文本域中的内容是否为空//校验忽略样式内容 后文本域中的内容是否为空.. 124 2.12 计算天数差的函数. 125 2.13 把结束日期月份加上月末日期.. 125 2.14 检验输入的日期yyyy-MM 126

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧