您的位置:首页 > Web前端 > JavaScript

javascript获取某月最后一天(公历)

2010-03-20 17:52 288 查看
【算法思想】

  获取下个月第一天(new Date(year, month + 1, 1))再倒退一天即可。

【优点】

  1. 不需要再计算某月含有多少天,虽然可以很简单解决吗,用数组[31,28/29,31,30,31,30,31,31,30,31,30,31];

  2. 不需要计算2月是否是闰月。

【代码】

/**
* @author Xing,XiuDong
* @date 2010.03.20
* @param year: 建议从0开始,0表示1900年
* @param month: 从0开始,0表示1月
*/
function getLastDateOfMonth(year, month) {
return new Date(new Date(year, month + 1, 1).getTime() - 1000 * 60 * 60 * 24);
}


【测试代码】

<mce:script type="text/javascript"><!--
/** * @author Xing,XiuDong * @date 2010.03.20 * @param year: 建议从0开始,0表示1900年 * @param month: 从0开始,0表示1月 */ function getLastDateOfMonth(year, month) { return new Date(new Date(year, month + 1, 1).getTime() - 1000 * 60 * 60 * 24); }

// test case starting...
function testGetLastDateOfMonth(year, month) {
document.writeln(year + "/" + month + " : " + getLastDateOfMonth(year, month).toLocaleString() + "<br />");
}

document.writeln("<h1>JavaScript 获取某月最后一天(Date)测试结果</h1>");

document.writeln("<h3>一般测试 :</h3>");

testGetLastDateOfMonth(2010, -1);
testGetLastDateOfMonth(2010, 0);
testGetLastDateOfMonth(2010, 1);
testGetLastDateOfMonth(2010, 2);
testGetLastDateOfMonth(2010, 3);
testGetLastDateOfMonth(2010, 4);
testGetLastDateOfMonth(2010, 5);
testGetLastDateOfMonth(2010, 6);
testGetLastDateOfMonth(2010, 7);
testGetLastDateOfMonth(2010, 8);
testGetLastDateOfMonth(2010, 9);
testGetLastDateOfMonth(2010, 10);
testGetLastDateOfMonth(2010, 11);
testGetLastDateOfMonth(2010, 12);
testGetLastDateOfMonth(2010, 13);

document.writeln("<h3>1月份测试 :</h3>");

testGetLastDateOfMonth(2008, 0);
testGetLastDateOfMonth(2009, 0);
testGetLastDateOfMonth(2010, 0);
testGetLastDateOfMonth(2011, 0);
testGetLastDateOfMonth(2012, 0);
testGetLastDateOfMonth(2013, 0);
testGetLastDateOfMonth(2014, 0);

document.writeln("<h3>2月份测试 :</h3>");

testGetLastDateOfMonth(2008, 1);
testGetLastDateOfMonth(2009, 1);
testGetLastDateOfMonth(2010, 1);
testGetLastDateOfMonth(2011, 1);
testGetLastDateOfMonth(2012, 1);
testGetLastDateOfMonth(2013, 1);
testGetLastDateOfMonth(2014, 1);

document.writeln("<h3>12月份测试 :</h3>");

testGetLastDateOfMonth(2008, 11);
testGetLastDateOfMonth(2009, 11);
testGetLastDateOfMonth(2010, 11);
testGetLastDateOfMonth(2011, 11);
testGetLastDateOfMonth(2012, 11);
testGetLastDateOfMonth(2013, 11);
testGetLastDateOfMonth(2014, 11);

document.writeln("<h3>BT月份测试(month <= 0) :</h3>");

testGetLastDateOfMonth(2010, 0);
testGetLastDateOfMonth(2010, -1);
testGetLastDateOfMonth(2010, -2);
testGetLastDateOfMonth(2010, -3);
testGetLastDateOfMonth(2010, -4);
testGetLastDateOfMonth(2010, -5);
testGetLastDateOfMonth(2010, -6);
testGetLastDateOfMonth(2010, -7);
testGetLastDateOfMonth(2010, -8);

document.writeln("<h3>BT月份测试(month >= 11) :</h3>");

testGetLastDateOfMonth(2010, 11);
testGetLastDateOfMonth(2010, 12);
testGetLastDateOfMonth(2010, 13);
testGetLastDateOfMonth(2010, 14);
testGetLastDateOfMonth(2010, 15);
testGetLastDateOfMonth(2010, 16);
testGetLastDateOfMonth(2010, 17);
testGetLastDateOfMonth(2010, 18);
testGetLastDateOfMonth(2010, 19);

document.writeln("<h3>BT年份测试(year = 0) :</h3>");

testGetLastDateOfMonth(0, 1);
testGetLastDateOfMonth(0, 0);
testGetLastDateOfMonth(0, -1);
testGetLastDateOfMonth(0, -2);
testGetLastDateOfMonth(0, -3);

document.writeln("<h3>BT年份测试(year <= 1) :</h3>");

testGetLastDateOfMonth(1, 0);
testGetLastDateOfMonth(0, 0);
testGetLastDateOfMonth(-1, 0);
testGetLastDateOfMonth(-2, 0);
testGetLastDateOfMonth(-3, 0);
testGetLastDateOfMonth(-4, 0);
testGetLastDateOfMonth(-5, 0);

document.writeln("<h3>BT年份测试(year > 9999) :</h3>");

testGetLastDateOfMonth(9999, 0);
testGetLastDateOfMonth(10000, 0);
testGetLastDateOfMonth(100001, 0);
testGetLastDateOfMonth(100002, 0);
testGetLastDateOfMonth(100003, 0);
// --></mce:script>


【测试结果】

JavaScript 获取某月最后一天(Date)测试结果

一般测试 :

2010/-1 : 2009年12月31日 星期四 0:00:00
2010/0 : 2010年1月31日 星期日 0:00:00
2010/1 : 2010年2月28日 星期日 0:00:00
2010/2 : 2010年3月31日 星期三 0:00:00
2010/3 : 2010年4月30日 星期五 0:00:00
2010/4 : 2010年5月31日 星期一 0:00:00
2010/5 : 2010年6月30日 星期三 0:00:00
2010/6 : 2010年7月31日 星期六 0:00:00
2010/7 : 2010年8月31日 星期二 0:00:00
2010/8 : 2010年9月30日 星期四 0:00:00
2010/9 : 2010年10月31日 星期日 0:00:00
2010/10 : 2010年11月30日 星期二 0:00:00
2010/11 : 2010年12月31日 星期五 0:00:00
2010/12 : 2011年1月31日 星期一 0:00:00
2010/13 : 2011年2月28日 星期一 0:00:00

1月份测试 :

2008/0 : 2008年1月31日 星期四 0:00:00
2009/0 : 2009年1月31日 星期六 0:00:00
2010/0 : 2010年1月31日 星期日 0:00:00
2011/0 : 2011年1月31日 星期一 0:00:00
2012/0 : 2012年1月31日 星期二 0:00:00
2013/0 : 2013年1月31日 星期四 0:00:00
2014/0 : 2014年1月31日 星期五 0:00:00

2月份测试 :

2008/1 : 2008年2月29日 星期五 0:00:00
2009/1 : 2009年2月28日 星期六 0:00:00
2010/1 : 2010年2月28日 星期日 0:00:00
2011/1 : 2011年2月28日 星期一 0:00:00
2012/1 : 2012年2月29日 星期三 0:00:00
2013/1 : 2013年2月28日 星期四 0:00:00
2014/1 : 2014年2月28日 星期五 0:00:00

12月份测试 :

2008/11 : 2008年12月31日 星期三 0:00:00
2009/11 : 2009年12月31日 星期四 0:00:00
2010/11 : 2010年12月31日 星期五 0:00:00
2011/11 : 2011年12月31日 星期六 0:00:00
2012/11 : 2012年12月31日 星期一 0:00:00
2013/11 : 2013年12月31日 星期二 0:00:00
2014/11 : 2014年12月31日 星期三 0:00:00

BT月份测试(month <= 0) :

2010/0 : 2010年1月31日 星期日 0:00:00
2010/-1 : 2009年12月31日 星期四 0:00:00
2010/-2 : 2009年11月30日 星期一 0:00:00
2010/-3 : 2009年10月31日 星期六 0:00:00
2010/-4 : 2009年9月30日 星期三 0:00:00
2010/-5 : 2009年8月31日 星期一 0:00:00
2010/-6 : 2009年7月31日 星期五 0:00:00
2010/-7 : 2009年6月30日 星期二 0:00:00
2010/-8 : 2009年5月31日 星期日 0:00:00

BT月份测试(month >= 11) :

2010/11 : 2010年12月31日 星期五 0:00:00
2010/12 : 2011年1月31日 星期一 0:00:00
2010/13 : 2011年2月28日 星期一 0:00:00
2010/14 : 2011年3月31日 星期四 0:00:00
2010/15 : 2011年4月30日 星期六 0:00:00
2010/16 : 2011年5月31日 星期二 0:00:00
2010/17 : 2011年6月30日 星期四 0:00:00
2010/18 : 2011年7月31日 星期日 0:00:00
2010/19 : 2011年8月31日 星期三 0:00:00

BT年份测试(year = 0) :

0/1 : 1900年2月28日 星期三 0:00:00
0/0 : 1900年1月31日 星期三 0:00:00
0/-1 : 1899年12月31日 星期日 0:00:00
0/-2 : 1899年11月30日 星期四 0:00:00
0/-3 : 1899年10月31日 星期二 0:00:00

BT年份测试(year <= 1) :

1/0 : 1901年1月31日 星期四 0:00:00
0/0 : 1900年1月31日 星期三 0:00:00
-1/0 : Sun Jan 31 00:00:00 UTC+0800 2 B.C.
-2/0 : Sat Jan 31 00:00:00 UTC+0800 3 B.C.
-3/0 : Fri Jan 31 00:00:00 UTC+0800 4 B.C.
-4/0 : Wed Jan 31 00:00:00 UTC+0800 5 B.C.
-5/0 : Tue Jan 31 00:00:00 UTC+0800 6 B.C.

BT年份测试(year > 9999) :

9999/0 : 9999年1月31日 星期日 0:00:00
10000/0 : Mon Jan 31 00:00:00 UTC+0800 10000
100001/0 : Wed Jan 31 00:00:00 UTC+0800 100001
100002/0 : Thu Jan 31 00:00:00 UTC+0800 100002
100003/0 : Fri Jan 31 00:00:00 UTC+0800 100003
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: