`

javascript日期处理-通过一个字符串的日期得到所在周的第一天和最后一天

阅读更多
工作中碰到一个需求,知道一个js字符串“2008-10-31”,得到这个日期所在周及其上一周的第一天和最后一天。

      值得一提的是关于周的问题,西方的周的第一天是周日,最后一天是周六。而对于中国来说,习惯上的周的第一天是周一,最后一天是周日。比如说“2008-10-31”按西方来说第一天是:2008-10-26周日,最后一天是“2008-11-01”周六,而我工作中所要用到的周是“中国式”的,第一天是2008-10-27周一,最后一天是2008-11-02周日。

      方法如下:

     

1.编写日期处理函数



//得到每周的第一天(周一)
function getFirstDateOfWeek(theDate){
 var firstDateOfWeek;
 theDate.setDate(theDate.getDate() + 1 - theDate.getDay()); 
 firstDateOfWeek = theDate;
 return firstDateOfWeek; 
}
//得到每周的最后一天(周日)
function getLastDateOfWeek(theDate){
 var lastDateOfWeek;
 theDate.setDate(theDate.getDate() +7 - theDate.getDay());
 lastDateOfWeek = theDate;
 return lastDateOfWeek; 
}

//得到上周的第一天(周一)
function getPreviousFirstDateOfWeek(theDate){
 var firstDateOfWeek;
 theDate.setDate(theDate.getDate() - 6 - theDate.getDay()); 
 firstDateOfWeek = theDate;
 return firstDateOfWeek; 
}
//得到上周的最后一天(周日)
function getPreviousLastDateOfWeek(theDate){
 var lastDateOfWeek;
 theDate.setDate(theDate.getDate() +7 - theDate.getDay());
 lastDateOfWeek = theDate;
 return lastDateOfWeek; 
}



2.编写格式化函数,以把得到的日期类型的数字转化成可以自己需要的字符串



//把时间类型的数字转换为各种需要的字符串

function   MM_dateFormat(rq,fenge)   {             
  //格式化日期显示   
  //fenge   =   0     :2006-02-28   12:34:23   
  //fenge   =   1     :2006-02-28   
  //fenge   =   2     :2006年2月28日     
  //fenge   =   3     :2月28日   
  //fenge   =   4     :28/2   
  //fenge   =   5     :二○○六年二月二十八日   
  //fenge   =   6     :12:34:23   
  //fenge   =   7     :20060228
  if   ((fenge==null)||(fenge==""))   fenge   =   0;   
  if   ((rq   =="")||(rq   ==null))   var   tmpDate   =   new   Date();   else     var   tmpDate   =   new   Date(rq);   
  var   result   =   "";   
  switch(fenge)   {            
  case   1:   
  result   +=   tmpDate.getFullYear()+"-";   
  if   ((tmpDate.getMonth()+1)<10)   result   +=   "0"+(tmpDate.getMonth()+1)+"-";   else   result   +=   (tmpDate.getMonth()+1)+"-";   
  if   (tmpDate.getDate()<10)   result   +=   "0"+tmpDate.getDate();   else   result   +=   tmpDate.getDate();   
  break;   
  case   2:   
  result   =   tmpDate.getFullYear()+"年"+(tmpDate.getMonth()+1)+"月"+tmpDate.getDate()+"日";   
  break;   
  case   3:   
  result   =   (tmpDate.getMonth()+1)+"月"+tmpDate.getDate()+"日";   
  break;   
  case   4:   
  result   =   tmpDate.getDate()+"/"+(tmpDate.getMonth()+1);   
  break;   
  case   5:   
  var   zhifu=   "○一二三四五六七八九十";   
  var   zhrq   ="";   
  var   nan   =   String(tmpDate.getFullYear());   
  for   (iii=0;iii<nan.length;iii++)   {   zhrq   +=   zhifu.substr(nan.substr(iii,1),1);   }   
  zhrq   +=   "年";   
  var   nan   =   String(tmpDate.getMonth()+1);   
  if   (nan.length   ==   2)   {   
  if   (nan.substr(0,1)=="1")   zhrq   +=   "十";   else   zhrq   +=   zhifu.substr(nan.substr(0,1),1)+"十";     
  if   (nan.substr(1,1)=="0")   zhrq   +=   "月";   else   zhrq   +=   zhifu.substr(nan.substr(1,1),1)+"月"   
  }   else   {   
  zhrq   +=   zhifu.substr(nan.substr(0,1),1)+"月";   
  }   
  var   nan   =   String(tmpDate.getDate());   
  if   (nan.length   ==   2)   {   
  if   (nan.substr(0,1)=="1")   zhrq   +=   "十";   else   zhrq   +=   zhifu.substr(nan.substr(0,1),1)+"十";     
  if   (nan.substr(1,1)=="0")   zhrq   +=   "日";   else   zhrq   +=   zhifu.substr(nan.substr(1,1),1)+"日"   
  }   else   {   
  zhrq   +=   zhifu.substr(nan.substr(0,1),1)+"日";   
  }   
  result   =   zhrq;   
  break;   
  case   6:   
  if   (tmpDate.getHours()<10)   result   +=   "0"+tmpDate.getHours();   else   result   +=   ""+   tmpDate.getHours();  
  if   (tmpDate.getMinutes()<10)   result   +=   ":0"+tmpDate.getMinutes();   else   result   +=   ":"+   tmpDate.getMinutes();  
  if   (tmpDate.getSeconds()<10)   result   +=   ":0"+tmpDate.getSeconds();   else   result   +=   ":"+   tmpDate.getSeconds();  
  break;   
  case   7:   
  result   +=   tmpDate.getFullYear();   
  if   ((tmpDate.getMonth()+1)<10)   result   +=   "0"+(tmpDate.getMonth()+1);   else   result   +=   (tmpDate.getMonth()+1);   
  if   (tmpDate.getDate()<10)   result   +=   "0"+tmpDate.getDate();   else   result   +=   tmpDate.getDate();   
  break;  
  default:   
  result   +=   tmpDate.getFullYear()+"-";   
  if   ((tmpDate.getMonth()+1)<10)   result   +=   "0"+(tmpDate.getMonth()+1)+"-";   else   result   +=   (tmpDate.getMonth()+1)+"-";   
  if   (tmpDate.getDate()<10)   result   +=   "0"+tmpDate.getDate();   else   result   +=   tmpDate.getDate();   
  if   (tmpDate.getHours()<10)   result   +=   "   0"+tmpDate.getHours();   else   result   +=   "   "+   tmpDate.getHours();   
  if   (tmpDate.getMinutes()<10)   result   +=   ":0"+tmpDate.getMinutes();   else   result   +=   ":"+   tmpDate.getMinutes();   
  if   (tmpDate.getSeconds()<10)   result   +=   ":0"+tmpDate.getSeconds();   else   result   +=   ":"+   tmpDate.getSeconds();   
  break;   
  }   
  return   result   
  }   



3.处理字符串,以使其转换成js的日期类型。



//取得处理字符串,然后转换成日期类型。

var   s   =   "2008-02-15";   
s = s+"   00:00:00";
var   tD   =   new   Date(Date.parse(s.replace(/-/g,   "/")));  


4.调用测试



//得到上周的第一天以及最后一天。

var lWeekFirstDay = getPreviousFirstDateOfWeek(tD).toLocaleString();
var lWeekLastDay = getPreviousLastDateOfWeek(tD).toLocaleString();

var ch2 = MM_dateFormat(lWeekFirstDay,7);
var ch3 = MM_dateFormat(lWeekLastDay,7);

 

alert("上周一的时间是:" + ch2);
alert("上周日的时间是:" + ch3 );



//得到本周的第一天以及最后一天。


var nWeekFirstDay = getFirstDateOfWeek(tD).toLocaleString();
var nWeekLastDay= getLastDateOfWeek(tD).toLocaleString();
var ch = MM_dateFormat(nWeekFirstDay,7);
var ch1 = MM_dateFormat(nWeekLastDay,7);
alert("本周一的时间是:" + ch);
alert("本周日的时间是:" + ch1);
分享到:
评论

相关推荐

    获取当月的第一天和最后一天

    本文将详细介绍一个用于获取当月第一天和最后一天的JS时间小插件,以及它提供的其他有用方法。 首先,我们来理解如何获取当前月的第一天和最后一天。在JavaScript中,Date对象是处理日期和时间的主要工具。但是,它...

    js 计算月/周的第一天和最后一天代码

    在JavaScript中,有时我们需要计算特定月份或周的第一天和最后一天,这在处理日期相关的业务逻辑时非常常见。本文将详细介绍如何使用JavaScript实现这个功能,主要涉及三个关键函数:`getDateStr3`、`...

    sqlserver,Asp.net,Jquery小总结

    在SQL Server中,查询特定时间范围的数据时,经常需要获取周、月、年或季度的第一天和最后一天。以下是一些实用的SQL Server函数来实现这个目标: 1. 获取当前日期所在周的第一天: ```sql DATEADD(WEEK, DATEDIFF...

    js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期

    开始日期是当前年和月的第一天,而结束日期是通过获取下个月的第一天,然后减去一天得到。 `getQuarterStartDate()`和`getQuarterEndDate()`分别获取本季度的开始和结束日期。开始日期是当前年份和本季度起始月份的...

    jquery动态生成select工作日列表Workday

    2. 使用JavaScript的Date对象来计算每月的第一天和最后一天。 3. 遍历每个月的每一天,检查是否为工作日(即周一到周五)。 4. 如果是工作日,将日期转换为友好的字符串格式(如“2022-01-03”)。 5. 使用jQuery的...

    js获取时间(本周、本季度、本月..)

    通过创建一个月的第一天和下一个月的第一天的Date对象,然后计算它们之间的时间差,从而得到天数。 6. 计算本季度的起始月份: getQuarterStartMonth()函数根据当前月份返回本季度的起始月份。逻辑是:1到3月为第一...

    Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】

    jQuery UI Datepicker 是一个非常流行的JavaScript库,用于在网页上添加日期选择功能。它允许用户通过图形界面来选择日期,并且开发者可以对其进行配置以满足不同的需求,例如设置日期范围和日期间隔限制。 在该...

    ASP.NET如何获取两个日期之间的天数

    除了基本的日期时间处理,ASP.NET还提供了许多其他时间日期相关的类和方法,例如获取特定日期是星期几的`DayOfWeek`属性,获取一个月的第一天和最后一天的`MonthStart`和`MonthEnd`扩展方法,以及获取当前时间的`Now...

    C#基础类库

    返回每月的第一天和最后一天 复制代码 TimeHelper 1.将时间格式化成 年月日 的形式,如果时间为null,返回当前系统时间 2.将时间格式化成 时分秒 的形式,如果时间为null,返回当前系统时间 3.把秒转换成分钟 4....

    C#基类库(苏飞版)

    返回每月的第一天和最后一天 复制代码 TimeHelper 1.将时间格式化成 年月日 的形式,如果时间为null,返回当前系统时间 2.将时间格式化成 时分秒 的形式,如果时间为null,返回当前系统时间 3.把秒转换成分钟 4....

    ImersaoDevAlura:10 dias de mergulho com alura sobre javascript

    在第一天,你可能会从基础语法开始学习,例如变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组)、运算符(算术、比较、逻辑、三元)以及流程控制(条件语句、循环)。...

    微信小程序 常用工具类详解及实例

    9. **日期时间操作**:提供更多的日期时间处理函数,如计算两个日期之间的差值、获取本周/本月的第一天和最后一天等。 10. **缓存管理**:存储和检索数据到本地缓存,以提高应用性能。 通过编写这样的工具类,...

    Advent-of-Code:我遇到的代码挑战的存储库

    例如,可能会有如 "2021/day1"、"2021/day2" 这样的结构,分别存储2021年第一天和第二天的挑战代码。 在 Advent of Code 的挑战中,常见的一些编程知识点包括: 1. **数据结构**:链表、数组、栈、队列、图、树等...

    Day03

    1. **基础语法**:在第一天和第二天,学员可能已经了解了变量、数据类型(如字符串、数字、布尔值、null和undefined)、操作符(算术、比较和逻辑操作符)以及流程控制语句(如条件语句if...else和循环语句for、...

Global site tag (gtag.js) - Google Analytics