js实现请假天数自动生成/带出(简易版:不处理周日周六等放假时段)
2018-01-18 21:39
393 查看
//var beginDateTag= document.form1.DATA_8;这个是获取要显示开始日期的文本框标签
// var dayTag=document.form1.DATA_6;这个是获取要显示天数的文本框的标签
window.onload=function(){
var beginDateTag= document.form1.DATA_8;
var endDateTag= document.form1.DATA_10;
var beginTimeTag= document.form1.DATA_9;
var endTimeTag= document.form1.DATA_11;
var dayTag=document.form1.DATA_6;
beginDateTag.onchange=function(){
if(endTimeTag.value!=""&&beginTimeTag.value!=""&&endTimeTag.value!="")
{
dayTag.value=getDay();
}
}
endDateTag.onchange=function(){
if(beginDateTag.value!=""&&beginTimeTag.value!=""&&endTimeTag.value!="")
{
dayTag.value=getDay();
}
}
beginTimeTag.onchange=function(){
if(beginDateTag.value!=""&&endDateTag.value!=""&&endTimeTag.value!="")
{
dayTag.value=getDay();
}
}
endTimeTag.onchange=function(){
if(beginDateTag.value!=""&&endDateTag.value!=""&&beginTimeTag.value!="")
{
dayTag.value=getDay();
}
}
function getDay()
{
var beginDate=beginDateTag.value.replace(/-/g, "/");
var endDate=endDateTag.value.replace(/-/g, "/");
var beginTime=beginTimeTag.value;
var endTime=endTimeTag.value;
var validTime=isValidDateTime(beginDate, endDate, beginTime, endTime);
if(validTime) {
var d=calculateDay(beginDate, endDate, beginTime, endTime);
return d;
}
else {
alert("结束时间必须大于开始时间")
return "";
}
}
}
function isValidDateTime(beginDate, endDate, beginTime, endTime) {
var bDateTime = new Date(beginDate + " " + beginTime);
var eDateTime = new Date(endDate + " " + endTime);
if(eDateTime.getTime() <= bDateTime.getTime()) {
return false;
} else {
return true;
}
}
function calculateDay(beginDate, endDate, beginTime, endTime) {
var hour = 60 * 60 * 1000;
var bTimeStr = beginTime.split(":");
var eTimeStr = endTime.split(":");
var bDate = new Date(beginDate);
var eDate = new Date(endDate);
var bTime = bTimeStr[0] * hour + bTimeStr[1] * 60 * 1000 + bTimeStr[2] * 1000;
var eTime = eTimeStr[0] * hour + eTimeStr[1] * 60 * 1000 + eTimeStr[2] * 1000;
var days = 0.0;
var half = 0.5;
var allDay = 1.0;
var AM_UpHour = 8 * hour;
var AM_DownHour = 12 * hour;
var PM_UpHour = 13.5 * hour;
var PM_DownHour = 17.5 * hour;
//相隔天数
var n = (eDate.getTime() - bDate.getTime()) / (hour * 24);
if(n > 1) {
days = n - 1;
}
//如果是同一天
if(beginDate == endDate) {
if(bTime < AM_DownHour) {
if(eTime <= PM_UpHour) {
days += half;
} else {
days += allDay;
}
} else {
days += allDay;
}
}
//不是同一天
else {
//计算开始的那一天的
//如果开始时间<早上下班时间+1.0
if(bTime < AM_DownHour) {
days += allDay;
}
//如果是下午开始
else {
days += half;
}
//计算结束的那一天
//如果是早上结束+0.5
if(eTime <= PM_UpHour) {
days += half;
}
//如果是下午结束+1.0
else {
days += allDay;
}
}
return days;
}
// var dayTag=document.form1.DATA_6;这个是获取要显示天数的文本框的标签
window.onload=function(){
var beginDateTag= document.form1.DATA_8;
var endDateTag= document.form1.DATA_10;
var beginTimeTag= document.form1.DATA_9;
var endTimeTag= document.form1.DATA_11;
var dayTag=document.form1.DATA_6;
beginDateTag.onchange=function(){
if(endTimeTag.value!=""&&beginTimeTag.value!=""&&endTimeTag.value!="")
{
dayTag.value=getDay();
}
}
endDateTag.onchange=function(){
if(beginDateTag.value!=""&&beginTimeTag.value!=""&&endTimeTag.value!="")
{
dayTag.value=getDay();
}
}
beginTimeTag.onchange=function(){
if(beginDateTag.value!=""&&endDateTag.value!=""&&endTimeTag.value!="")
{
dayTag.value=getDay();
}
}
endTimeTag.onchange=function(){
if(beginDateTag.value!=""&&endDateTag.value!=""&&beginTimeTag.value!="")
{
dayTag.value=getDay();
}
}
function getDay()
{
var beginDate=beginDateTag.value.replace(/-/g, "/");
var endDate=endDateTag.value.replace(/-/g, "/");
var beginTime=beginTimeTag.value;
var endTime=endTimeTag.value;
var validTime=isValidDateTime(beginDate, endDate, beginTime, endTime);
if(validTime) {
var d=calculateDay(beginDate, endDate, beginTime, endTime);
return d;
}
else {
alert("结束时间必须大于开始时间")
return "";
}
}
}
function isValidDateTime(beginDate, endDate, beginTime, endTime) {
var bDateTime = new Date(beginDate + " " + beginTime);
var eDateTime = new Date(endDate + " " + endTime);
if(eDateTime.getTime() <= bDateTime.getTime()) {
return false;
} else {
return true;
}
}
function calculateDay(beginDate, endDate, beginTime, endTime) {
var hour = 60 * 60 * 1000;
var bTimeStr = beginTime.split(":");
var eTimeStr = endTime.split(":");
var bDate = new Date(beginDate);
var eDate = new Date(endDate);
var bTime = bTimeStr[0] * hour + bTimeStr[1] * 60 * 1000 + bTimeStr[2] * 1000;
var eTime = eTimeStr[0] * hour + eTimeStr[1] * 60 * 1000 + eTimeStr[2] * 1000;
var days = 0.0;
var half = 0.5;
var allDay = 1.0;
var AM_UpHour = 8 * hour;
var AM_DownHour = 12 * hour;
var PM_UpHour = 13.5 * hour;
var PM_DownHour = 17.5 * hour;
//相隔天数
var n = (eDate.getTime() - bDate.getTime()) / (hour * 24);
if(n > 1) {
days = n - 1;
}
//如果是同一天
if(beginDate == endDate) {
if(bTime < AM_DownHour) {
if(eTime <= PM_UpHour) {
days += half;
} else {
days += allDay;
}
} else {
days += allDay;
}
}
//不是同一天
else {
//计算开始的那一天的
//如果开始时间<早上下班时间+1.0
if(bTime < AM_DownHour) {
days += allDay;
}
//如果是下午开始
else {
days += half;
}
//计算结束的那一天
//如果是早上结束+0.5
if(eTime <= PM_UpHour) {
days += half;
}
//如果是下午结束+1.0
else {
days += allDay;
}
}
return days;
}
相关文章推荐
- 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版!
- 详解原生JS根据图片多少自动生成相册_实现焦点或按钮切换图片
- mvc+js实现自动生成.doc文件
- js实现自动生成表格
- js实现瀑布流效果(自动生成新的内容)
- Vue结合原生js实现自定义组件自动生成
- js实现上班请假天数计算
- Java-js处理textarea自动生成的制表符(空格,换行,tab等)
- js 取时间差去掉周六周日实现代码
- js 取时间差去掉周六周日实现代码
- js实现点击按钮自动生成li
- js实现自动生成表格
- 利用node.js实现自动生成前端项目组件的方法详解
- js实现点击按钮自动生成V字形,可连续点击四次
- php实现自动获取生成文章主题关键词功能-简易分词
- js实现自动生成日期calendar.js
- Vue结合原生js实现自定义组件自动生成示例
- 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版!
- Linq To Sql模式中自动生成T-SQL增删改操作系列~PropertyChanged事件实现在子类中记录属性的变化,在基类中进行统一处理
- 用js实现的一个根据内容自动生成表格的函数