用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分。
谢谢!~
<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
帮其他专业的同学写网课作业,见到这道有点烦人的题目,一看网上没有现成的答案,那就自己写一份先码这把,没啥特别的技巧,典型的模拟,注意细节就好。
- struct DateG days2Date(int x){
- struct DateG Year;
- Year.yy=1;
- Year.mm=1;
- Year.dd=1;
- while(x--){
- Year.dd++;
- if((Year.yy%4==0&&Year.yy%100!=0)||Year.yy%400==0){//是闰年
- 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)
- {
- Year.dd=1;
- Year.mm++;
- if(Year.mm>12){
- Year.mm=1;
- Year.yy++;
- }
- }
- else if(Year.mm==2&&Year.dd>29){//闰年二月单独讨论
- Year.dd=1;
- Year.mm++;
- }
- else if((Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){
- Year.dd=1;
- Year.mm++;
- }
- }
- else{//非闰年
- 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)
- {
- Year.dd=1;
- Year.mm++;
- if(Year.mm>12){
- Year.mm=1;
- Year.yy++;
- }
- }
- else if(Year.mm==2&&Year.dd>28){//二月单独讨论
- Year.dd=1;
- Year.mm++;
- }
- else if((Year.mm==2||Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){
- Year.dd=1;
- Year.mm++;
- }
- }
- }
- return Year;
- }
- int Days(struct DateG x){
- int res=0,flag=1;
- while(flag==1){
- res++;
- x.dd--;
- if((x.yy%4==0&&x.yy%100!=0)||x.yy%400==0){//闰年
- 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){
- if(x.mm==8||x.mm==1)
- x.dd=31;
- else if(x.mm==3)
- x.dd=29;
- else
- x.dd=30;
- x.mm--;
- if(x.mm==0){
- x.mm=12;
- x.yy--;
- }
- }
- else if((x.mm==2||x.mm==4||x.mm==6||x.mm==9||x.mm==11)&&x.dd==0){
- x.dd=31;
- x.mm--;
- }
- }
- else{//非闰年
- 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){
- if(x.mm==8||x.mm==1)
- x.dd=31;
- else if(x.mm==3)
- x.dd=28;
- else
- x.dd=30;
- x.mm--;
- if(x.mm==0){
- x.mm=12;
- x.yy--;
- }
- }
- else if((x.mm==2||x.mm==4||x.mm==6||x.mm==9||x.mm==11)&&x.dd==0){
- x.dd=31;
- x.mm--;
- }
- }
- if(x.yy==1&&x.mm==1&&x.dd==1)
- flag=0;
- }
- return res;
- }
以上是关于用javascript实现计算日期,推算上早晚班的主要内容,如果未能解决你的问题,请参考以下文章