用javascript实现计算日期,推算上早晚班

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用javascript实现计算日期,推算上早晚班相关的知识,希望对你有一定的参考价值。

我现在的工作是上12小时,休息24小时,没有公休。
现在想编写一个html,用javascript实现计算日期,
实现功能:输入今天的日期时间和早晚班,输入要计算的日期,输出那天是早班还是晚班。
比如2009年8月10号是早班,上早上8:00,下晚上20:00;
2009年8月11号是晚班,上晚上20:00,下2009年8月12号早8:00;
2009年8月13号是早班,上早上8:00,下晚上20:00;
。。。
。。。
需要考虑每个月的不同天数,需要考虑2月29号,
推算今天之后的任意一天上早上8点还是晚上20:00。
先给50分,最佳答案再追加50分。
谢谢!~

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript">
function search()
var todaystr = document.getElementById("today").value ;
var todaysplit = todaystr.split("-");
var today = new Date(todaysplit[0],todaysplit[1],todaysplit[2]);

var searchdaystr = document.getElementById("searchday").value ;
var searchdaysplit = searchdaystr.split("-");
var searchday = new Date(searchdaysplit[0],searchdaysplit[1],searchdaysplit[2]);

// 计算相差的天数
var day = (searchday - today)/1000/3600/24;

// 取得当前是早班还是晚班
var alltype = document.all.type ;

var type=0;
if (alltype[1].checked)
type = 1;


// 3天一循环,对3求余,看差几天,再加上早晚班的值
day = day%3 + type ;
if (day == 0)

alert("早班 8:00 --> 20:00");
else if (day == 1)

alert("晚班 20:00上 ");
else
alert("下晚班 8:00下 ");



</script>
</HEAD>

<BODY>
输入今天日期:<input type="text" name="today" > 日期按照以下格式输入: 年 - 月 - 日 (例如:2004-1-30) <br>
选择早晚:<input type="radio" name="type" value="0" checked> 早班 <input type="radio" name="type" value="1"> 晚班 <br>
输入查询日期:<input type="text" name="searchday" > <br>
<input type="button" value="查询" onClick="search();">
</BODY>
</HTML>
参考技术A <script type="text/javascript">
function btnCount_Click()
s1 = document.getElementById("zaodate").value;
s2 = document.getElementById("date").value;
var dd=DateDiff(s1,s2);
if(dd%2==0)
alert("早班")
else
alert("晚班")



//计算天数差的函数,通用
function DateDiff(sDate1, sDate2) //sDate1和sDate2是2006-12-18格式
var aDate, oDate1, oDate2, iDays
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2006格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24) //把相差的毫秒数转换为天数
return iDays


</script>

<h1>输入日期的格式:YYYY-MM-DD,如:2006-12-18 </h1><br>

默认以2009年8月10号是早班计算,如果想更改请修改这里:早班日期:<input name="zaodate" value="2009-8-10"><br>
输入想查询的日期<input name="date" value="2009-08-11">
<input name="" type="button" onclick="btnCount_Click()" value="计算" />

pta习题:退休日期推算

6-3 退休日期推算 (10分)
 

关于日期的结构定义如下: struct DateG{ int yy,mm,dd;};

编写两个函数,一个计算自公元1年1月1日到指定的日期共经历了多少天。另一个是前一个函数的逆函数:由自公元1年1月1日历经指定的天数后的日期(返回年月日构成的日期)。

函数接口定义:

DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(DateG x);// {2,,4,11}    return 465   from{1,1,1} 
 

裁判测试程序样例:

#include <iostream>
using namespace std;
struct DateG{
	int yy,mm,dd;
};
char leapYear(int year);//闰年否
struct DateG _DateG(char *st);{//"1919-9-9"-->{1919,9,9}
struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29}
char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09"
 //以上为测试程序提供的测试用函数,略去不表,
//以下两函数是必须自己完成的函数 
struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(struct DateG x);// {2,,4,11}    return 465   from{1,1,1} 

int main(){
	char st[12];scanf("%s",st);
	struct DateG d1=_DateG(st),
	d2=Add(d1,60*365);
	printf("%s
",Date2string(d2));	
	d2=Add(d2,-1000);
	printf("%s
",Date2string(d2));
	d2=_DateG("2020-1-23");
	printf("%.2f
",(Days(d2)-Days(d1))/365.0);
	return 0;
}
/* 请在这里填写答案 */

输入样例:

2001-1-1

输出样例:

[2060-12-17]
[2058-03-23]
19.07

 

帮其他专业的同学写网课作业,见到这道有点烦人的题目,一看网上没有现成的答案,那就自己写一份先码这把,没啥特别的技巧,典型的模拟,注意细节就好。

 

  1. struct DateG days2Date(int x){    
  2.         struct DateG Year;    
  3.         Year.yy=1;    
  4.         Year.mm=1;    
  5.         Year.dd=1;    
  6.         while(x--){    
  7.             Year.dd++;    
  8.             if((Year.yy%4==0&&Year.yy%100!=0)||Year.yy%400==0){//是闰年     
  9.                 if((Year.mm==1||Year.mm==3||Year.mm==5||Year.mm==7||Year.mm==8||Year.mm==10||Year.mm==12)&&Year.dd>31)    
  10.                 {    
  11.                     Year.dd=1;    
  12.                     Year.mm++;    
  13.                     if(Year.mm>12){    
  14.                         Year.mm=1;    
  15.                         Year.yy++;    
  16.                     }    
  17.                 }    
  18.                 else if(Year.mm==2&&Year.dd>29){//闰年二月单独讨论     
  19.                     Year.dd=1;    
  20.                     Year.mm++;    
  21.                 }    
  22.                 else if((Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){    
  23.                     Year.dd=1;    
  24.                     Year.mm++;    
  25.                 }    
  26.             }    
  27.             else{//非闰年     
  28.                 if((Year.mm==1||Year.mm==3||Year.mm==5||Year.mm==7||Year.mm==8||Year.mm==10||Year.mm==12)&&Year.dd>31)    
  29.                 {    
  30.                     Year.dd=1;    
  31.                     Year.mm++;    
  32.                     if(Year.mm>12){    
  33.                         Year.mm=1;    
  34.                         Year.yy++;    
  35.                     }    
  36.                 }    
  37.                 else if(Year.mm==2&&Year.dd>28){//二月单独讨论     
  38.                     Year.dd=1;    
  39.                     Year.mm++;    
  40.                 }    
  41.                 else if((Year.mm==2||Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){    
  42.                     Year.dd=1;    
  43.                     Year.mm++;    
  44.                 }    
  45.             }    
  46.         }    
  47.         return Year;    
  48.     }    
  49.         
  50.     int Days(struct DateG x){    
  51.         int res=0,flag=1;    
  52.         while(flag==1){    
  53.             res++;    
  54.             x.dd--;    
  55.             if((x.yy%4==0&&x.yy%100!=0)||x.yy%400==0){//闰年    
  56.                 if((x.mm==1||x.mm==3||x.mm==5||x.mm==7||x.mm==8||x.mm==10||x.mm==12)&&x.dd==0){    
  57.                     if(x.mm==8||x.mm==1)    
  58.                         x.dd=31;    
  59.                     else if(x.mm==3)    
  60.                         x.dd=29;    
  61.                     else    
  62.                         x.dd=30;    
  63.                     x.mm--;    
  64.                     if(x.mm==0){    
  65.                         x.mm=12;    
  66.                         x.yy--;    
  67.                     }    
  68.                 }    
  69.                 else if((x.mm==2||x.mm==4||x.mm==6||x.mm==9||x.mm==11)&&x.dd==0){    
  70.                     x.dd=31;    
  71.                     x.mm--;    
  72.                 }    
  73.             }    
  74.             else{//非闰年    
  75.                 if((x.mm==1||x.mm==3||x.mm==5||x.mm==7||x.mm==8||x.mm==10||x.mm==12)&&x.dd==0){    
  76.                     if(x.mm==8||x.mm==1)    
  77.                         x.dd=31;    
  78.                     else if(x.mm==3)    
  79.                         x.dd=28;    
  80.                     else    
  81.                         x.dd=30;    
  82.                     x.mm--;    
  83.                     if(x.mm==0){    
  84.                         x.mm=12;    
  85.                         x.yy--;    
  86.                     }    
  87.                 }    
  88.                 else if((x.mm==2||x.mm==4||x.mm==6||x.mm==9||x.mm==11)&&x.dd==0){    
  89.                     x.dd=31;    
  90.                     x.mm--;    
  91.                 }    
  92.             }    
  93.                 
  94.             if(x.yy==1&&x.mm==1&&x.dd==1)    
  95.                 flag=0;    
  96.         }    
  97.         return res;    
  98.     }  
 

以上是关于用javascript实现计算日期,推算上早晚班的主要内容,如果未能解决你的问题,请参考以下文章

pta习题:退休日期推算

用SQL语句计算出给定日期是星期几?

java 按日期分组 算法

用SQL语句计算出给定日期是星期几?

用javascript语言获得当前计算机的日期时间,并显示在网页上

前端怎么根据给出的时间字段推算出周几?