跳到主要内容

日期Date

1、日期的定义

定义日期

var date = new Date(); // 获取当前日期

// 带参数的日期形式
var date = new Date("month dd,yyyy hh:mm:ss"); // 自定义日期(日期必须合法)
var date = new Date("month dd,yyyy"); // 自定义日期(日期必须合法)
var date = new Date(yyyy,mth,dd,hh,mm,ss); // 日期可以不合法,会自动转换
var date = new Date(yyyy,mth,dd); // 日期可以不合法,会自动转换
var date = new Date(ms);// 毫秒

// 示例:
var d1 = new Date("January 6,2006 23:15:35");
var d2 = new Date("January 6,2006");
var d3 = new Date(2006,2,8,12,15,35);
var d4 = new Date(2006,4,6);
var d5 = new Date(1137075575000);

2、日期(获取)相关方法

var date = new Date();
var year = date.getFullYear(); // 获取当前年份 //2018
var month = date.getMonth() + 1; // 获取当前月份 //11
var day = date.getDate(); // 获取当前天数 //3
var week = date.getDay() // 获取当前星期几 //6

var hour = date.getHours(); // 时
var min = date.getMinutes(); // 分
var sec = date.getSeconds(); // 秒

注意:我们获取到的月份比实际月份少一个月,所以要加一。

3、日期(设置)相关方法

var date = new Date();
var year = date.setFullYear(2000); // 获取当前年份为2000年
var month = date.setMonth(11); // 获取当前月份为11月
var day = date.setDate(1); // 设置当前天数为1号
// var week = date.setDay() // 不能设置当前星期几

4、时间处理函数

Date.parse("2015-08-24"); // 计算自1970年1月1日至2015年8月24日的毫秒数(转换格式默认支持2015-08-24或2015/08/24)

getTime(); // getTime获取某个日期自1970年以来的毫秒数

setTime() // setTime修改日期的毫秒数,对应的日期时间也会修改

// 示例:
var d = new Date();
d.setTime(56521211021);

5、封装日期相关函数

// 获取当前月的天数
function getCurrentDays(date) {
// 设置临时日期格式,防止在设置日期的时候,月份+1,-1的转换
var tmp = new Date("2000-01-01");
tmp.setFullYear(date.getFullYear());
tmp.setMonth(date.getMonth() + 1); // date.getMonth() 是比当前月上一天的,但是设置的时候会自动多加一天,抵消了
tmp.setDate(0);
return tmp.getDate();
}

// 获取上个月的天数
function getPrevMonthDays(date) {
// 设置临时日期格式,防止在设置日期的时候,月份+1,-1的转换
var tmp = new Date("2000-01-01");
tmp.setFullYear(date.getFullYear());
tmp.setMonth(date.getMonth());
tmp.setDate(0);
return tmp.getDate();
}

// 根据日期获取当月的第一天是星期几
function getWeekByFirstDay(date) {
// 设置临时日期格式,防止在设置日期的时候,月份+1,-1的转换
var tmp = new Date("2000-01-01");
tmp.setFullYear(date.getFullYear());
tmp.setMonth(date.getMonth());
tmp.setDate(1);

return tmp.getDay();
}

6、案例:日历

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}

#box {
width: 210px;
overflow: hidden;
margin: 50px auto;
}

#header {
width: 210px;
height: 30px;
}

#header span {
float: left;
height: 30px;
text-align: center;
line-height: 30px;
background-color: #333333;
color: #ffffff;
}

#first {
width: 210px;
height: 60px;
}

#first p {
width: 210px;
height: 30px;
line-height: 30px;
text-align: center;
background-color: rgb(221, 27, 59);
color: #fff;
}

#first #nongli {
background-color: rgb(48, 141, 218);
}

#header #prev,
#header #next {
width: 20%;
cursor: pointer;
background-color: rgb(234, 248, 35);
color: #333;
}

#middle {
width: 60%;
}

.th {
width: 210px;
height: 30px;
}

ul li {
float: left;
width: 30px;
height: 30px;
text-align: center;
line-height: 30px;
background-color: #333333;
color: #fff;
box-sizing: border-box;
border: 1px solid transparent;
}

ul li:hover {
border: 1px solid #fff;
background-color: #666;
}
</style>

</head>

<body>
<div id="box">
<div id="first">
<p id="time"></p>
<p id="nongli"></p>
</div>
<div id="header">
<span id="prev"></span>
<span id="middle">2018-11</span>
<span id="next"></span>
</div>

<ul class="th">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

<ul id="content">
</ul>
</div>
</body>
<script src="../js/daotin.js"></script>
<script src="../js/nongli.js"></script>
<script>
var pFirst = document.getElementById("time");
var pSecond = document.getElementById("nongli");
var prevBtn = document.getElementById("prev");
var nextBtn = document.getElementById("next");
var middle = document.getElementById("middle");
var content = document.getElementById("content");

var date = new Date();

nowTime(date);
setInterval(function () {
nowTime(new Date());
}, 1000);

// 实时时钟部分
function nowTime(date) {
var hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
var minute = date.getMinutes();
minute = minute < 10 ? "0" + minute : minute;
var sec = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
pFirst.innerHTML = hour + " : " + minute + " : " + sec;
}


// 农历部分
var yyyy = date.getFullYear();
var mm = date.getMonth() + 1;
var dd = date.getDate();
var ww = date.getDay();
// var ss = parseInt(date.getTime() / 1000);
if (yyyy < 100) {
yyyy = "19" + yyyy;
}

pSecond.innerHTML = GetLunarDay(yyyy, mm, dd);

// 日历部分
// 显示日历
showCalendar();

prevBtn.onclick = function () {
date.setMonth(date.getMonth() - 1);
showCalendar();
// prevBtn.style.backgroundColor = "red";
};
prevBtn.onmouseover = function () {
prevBtn.style.backgroundColor = "red";
};
prevBtn.onmouseout = function () {
prevBtn.style.backgroundColor = "";
};


nextBtn.onclick = function () {
date.setMonth(date.getMonth() + 1);
showCalendar();
};
nextBtn.onmouseover = function () {
nextBtn.style.backgroundColor = "red";
};
nextBtn.onmouseout = function () {
nextBtn.style.backgroundColor = "";
};

function showCalendar() {

middle.innerHTML = date.getFullYear() + "年" + (date.getMonth() + 1) + "月";


var weekByFirstDay = getWeekByFirstDay(date);
var currentDays = getCurrentDays(date);
var prevDays = getPrevMonthDays(date);

weekByFirstDay == 0 ? weekByFirstDay = 7 : weekByFirstDay;

var html = "";

// 上个月剩余的部分
for (var i = prevDays - weekByFirstDay + 2; i <= prevDays; i++) {
html += "<li style='background-color: orange;'>" + i + "</li>";
}

// 本月的日历
for (var i = 1; i <= currentDays; i++) {
html += "<li>" + i + "</li>";
}

// 下个月的部分
for (var i = 1; i <= (42 - weekByFirstDay - currentDays) + 1; i++) {
html += "<li style='background-color: blue;'>" + i + "</li>";
}

content.innerHTML = html;
}
</script>

</html>