JS计算指定日期是距今的第几周,星期几
无意中在百度知道上发现这样一个问题,就抽时间见写了一个函数。
首先我们需要明确,既然是指定日期距今的第几周,那么就要知道指定的日期是什么,而且是不能确定的,会根据使用者不同而得到不同的日期,所以我们需要将这个日期设置为参数,由使用者决定。
下面我们一起来看一下这段代码:
(function(){
/*
* 说明:
* 一周的起始计算方式不同国家有所不同,很多其他国家将周日作为一周的开始
* 本代码使用中国习惯,将周一作为每周的开始
* 特此说明
*/ function TodayInfo(start) {
var WEEKLEN = 7, // 一周7天为常量
WEEKDAYS = ["日", "一", "二", "三", "四", "五", "六"],
weekInfo = {"week": null, "day": null}, // 初始化返回信息,默认第null周,星期null
oneDay = 24 * 60 * 60 * 1000, // 一天的毫秒时长
weekLeave, // 开学当天所在周剩余天数
weekStart, // 开学当天start是星期几
today, // 今天
dateDiff, // 今天与开学当天日期差
sDate; //开学之日,日期对象
var rDateStr = /\d{4}[\/-]\d{1,2}[\/-]\d{1,2}/g; // 简单的日期格式校验:2013/12/19
if (!rDateStr.test(start)) {
alert("请使用合法的开学日期!!!");
return weekInfo;
}
sDate = new Date(start.replace("-", "/"));
weekStart = sDate.getDay();
weekStart = weekStart === 0 ? 7 : weekStart; // JS中周日的索引为0,这里转换为7,方便计算 weekLeave = WEEKLEN - weekStart;
today = new Date();
weekInfo.day = WEEKDAYS[today.getDay()];
today = new Date(today.getFullYear() + "/" + (today.getMonth() + 1) + "/" + today.getDate());
dateDiff = today - sDate;
if (dateDiff < 0) {
alert("别开玩笑了,你还没开学呢!!!");
return weekInfo;
}
dateDiff = parseInt(dateDiff / oneDay);
weekInfo.week = Math.ceil((dateDiff - weekLeave) / WEEKLEN) + 1;
return weekInfo;
}
// 测试结果
var td = TodayInfo("2013/12/16");
console.log("今天是自2013/12/16日,开学以来的第 " + td.week + " 周,今天星期" + td.day);
td = TodayInfo("2013/11/11");
console.log("今天是自2013/11/11日,开学以来的第 " + td.week + " 周,今天星期" + td.day);
td = TodayInfo("2013/09/01");
console.log("今天是自2013/09/01日,开学以来的第 " + td.week + " 周,今天星期" + td.day);
td = TodayInfo("2013/12/29");
console.log("今天是自2013/12/29日,开学以来的第 " + td.week + " 周,今天星期" + td.day);
})();
这里在跟大家介绍一些关于Date对象的使用技巧:
- 获取前一月的总天数
var a = new Date(), total = 0;
a.setDate(0);
total = a.getDate(); // - 计算两个日期之间的时间差:
var total = new Date('2014/10/13') - new Date();
JS计算指定日期是距今的第几周,星期几的更多相关文章
- js计算指定日期的下一年的日期
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Js计算指定日期加上多少天,加多少月,加多少年的日期
function DateAdd(interval,number,date) { /* * 功能:实现VBScript的DateAdd功能. * 参数:interval,字符串表达式,表示要添加的时间 ...
- Js计算指定日期
function DateAdd(interval,number,date) { /* * 功能:实现VBScript的DateAdd功能. * 参数:interval,字符串表达式,表示要添加的时间 ...
- HIVE 计算指定日期本周的第一天和最后一天
-- 计算指定日期本周的第一天和最后一天 select day ,dayofweek(day) as dw1 ,date_add( - dayofweek(day)) as Su_s -- 周日_st ...
- delphi中计算指定日期是该月第几周的函数
NthDayOfWeek 计算并返回指定日期是该月第几周 Unit:DateUtils function NthDayOfWeek(const AValue: TDateTime): Word; ...
- JavaScript计算指定日期与当前日期的相差天数
java中处理2个时间段相差几天很容易,直接调相关方法就行,不过js处理这类问题稍微有点不易,项目开发中也用到了,如下: 1 2 3 4 5 6 7 8 9 10 11 12 //计算两个日期天数差的 ...
- js实现指定日期增加指定月份
首先,大致思路为: 1. 先将字符串格式的时间类型转化为Date类型 2. 再将Date类型的时间增加指定月份 3. 最后将Date类型的时间在转化为字符串类型 1. 先将字符串格式的时间类型转化为 ...
- js 获取指定日期
查询几天后的js代码,如果查询当天的日期 if($("input[name='startTime']").val()==""){ $("input[n ...
- JS 获取指定日期的前几天,后几天
function getNextDate(date,day) { var dd = new Date(date); dd.setDate(dd.getDate() + day); var y = dd ...
随机推荐
- 大整数相乘的C实现
//之前有个测试这个题没做完,现在把它做完,通过这个程序可以对乘法了解更深刻.分析:运用整数乘法,当然进制越高越好,考虑到乘法不要越界,故考虑进制底数N应该满 //足,N^2<2^32次方.所以 ...
- Java Random随机种子
第一种情况 Random rand = new Random(47); for(int i=0;i<10;i++) System.out.println(rand.nextInt(100)); ...
- 并行HASH JOIN小表广播问题
SQL语句: SELECT /*+parallel(t1 16)*/ T1.DATA_DATE, T1.ACCT_NO, T1.ACCT_ORD, T1.ACCT_NO_PK, T1.ACCT_BAL ...
- lemon OA 下阶段工作安排
lemon OA 下阶段工作安排 经验总结 lemon OA系统作为一个中型的java web系统,在架构上还是有着很好地可学习的地方.但是由于经验不足,过程比较迂回.如果真的有经验的话,应该可以做到 ...
- Linux学习笔记4——函数调用栈空间的分配与释放
一.函数执行时使用栈空间作为自己的临时栈,3种方式决定编译器清空栈的方式:__stdcall. __fastcall.__cdecl 1.__stdcall表示每个调用者负责清空自己调用的函数的临时栈 ...
- HDOJ 1312 (POJ 1979) Red and Black
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
- Android学习笔记(六)Fragment的生命周期
在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期. 一.Fragment的几种状态: 与Activity类似,Fragment也有一下几种状态: · 活动状态 ...
- Anjuta 调试无输出 warning: GDB: Failed to set controlling terminal
调试无输出,起初以为是那个warning的问题,后来才知道这个系统printf直到遇到'\n'换行符才输出,VC6用习惯了没想到还有这样的,网上说这样是节省系统资源. 那个warning暂时还没看到影 ...
- 让x86的android模拟器能模拟arm架构系统
网上介绍共计三种模拟器比较常用,分别是bluestacks.andy和Genymotion,前者支持ARM架构,中者支持远程控制,后者启动速度快,各有优缺点. 如果要用genymotion模拟arm的 ...
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...