前台选择周几(周一周日),比如选择<td>周一</td>,<td>周三</td>,<td>周五</td>我用js attr 给td添加一个selected和value(1-7分别对应周一到周日),然以后取seleted了的value,如1,3,5当成一个数组,然后还有开始日期start和结束日期end。需求就是需要计算开始日期和结束日期之间的所有选中的周一周三周五的日期。如果所示:

以下是js代码:最终值需要调用addWeeks(startTime,endTime,weeks)只需要填写开始日期、结束日期和选择的值数组就行。

function addDate($now,$addCount){
  $now+=$addCount*1000*60*60*24;
  var d=new Date($now);
  return d;
}
function addTd($addCount){
  var td="";
  for(var i=0;i<$addCount;i++){
    td+="<td></td>";
  }
  return td;
}
function addDateWithTd($dt){
  var td="<td>";
  var dt=new Date($dt);
  td+=(dt.getMonth()+1)+"."+dt.getDate();
  //td+=dt.toLocaleDateString();
  td+="</td>";
  return td;
}

function addWeeks(startTime,endTime,weeks){
  var start=new Date(startTime);
  var b;
  var c=new Date();
  alert(c.toLocaleDateString());
  alert(start.toLocaleDateString());
  var diff=Math.floor((c.getTime()-start.getTime())/(1000*60*60*24));
  alert(diff);
  if(diff<0){
    b=start;
  }else{
    b=addDate(c.getTime(),1);
  }
  var e=new Date(endTime);

  var $totalDay=(e-b)/1000/60/60/24+1
  //var weeks=[1,3,0];
  var $td="<td></td>";
  var $btr="<tr>";
  var $etr="</tr>";
  var $all="";
  var num=b.getDay();
  if(b.getDay()==0){
    num=7;
  }
  $all+=$btr;
  $all+=addTd(num-1);
  for(var i=0;i<$totalDay;i++){
    var flag=false;
  if(b.getDay()==1){
    $all+=$btr;
  }
  for(var j=0;j<weeks.length;j++){
    if(b.getDay()==weeks[j]){
      $all+=addDateWithTd(b.getTime());
      flag=true;
      break;
    }
  }
  if(!flag){
    $all+=$td;
  }
  if(b.getDay()==0){
    $all+=$etr;
  }
    b=addDate(b.getTime(),1);
 }
  if(e.getDay()==0){
    num=7;
  }else{
    num=e.getDay();
    $all+=addTd(7-num);
  }
  $all+=$etr;
  return $all;
}

用js计算从开始到结束时间之内的按周值选定的更多相关文章

  1. JS计算距当前时间的时间差

    /** * JS获取距当前时间差 * * @param int time JS毫秒时间戳 * */ function get_time_diff(time) { var diff = ''; var ...

  2. js计算两个时间之间的间隔

    计算时间间隔的方法有很多,这里只是一种方式,可以方法里直接传入两个时间,也可以传入两个字符串格式的时间,在方法里解析一下就ok,这个例子里不传入参数,直接在方法里随便写一个时间来演示一下 fun() ...

  3. js计算发表的时间...分钟/小时以前/以后

    网上找的都好复杂,这本来就是个粗略显示通俗的时间,绕来绕去都晕了 function timeAgo(o){ var n=new Date().getTime(); var f=n-o; var bs= ...

  4. js计算两个时间相差天数

     //两个时间相差天数 兼容firefox chrome    function datedifference(sDate1, sDate2) {    //sDate1和sDate2是2006-12 ...

  5. js计算两个时间相差

    .filter('useTime', function() { return function(val) { // if (/.(.mp4)$/gi.test(url)) { // return JS ...

  6. js间隔一段时间打印数据库中的值

    https://blog.csdn.net/qq_33599109/article/details/78417474

  7. JS判断2个时间是否在同一周

    function isSameWeek(old, now) { var oneDayTime = 1000 * 60 * 60 * 24; var old_count = parseInt(+old ...

  8. js 计算当年还剩多少时间的倒数计时 javascript 原理解析【复制到编辑器查看推荐】

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. js 计算过去和未来的时间距离现在多少天?

    计算传入的任意一时间.计算出这个时间距离现在还有多少天!或者计算过去的时间距离现在已经过去了多少天! 返回值有两种! 1.负值 代表过去了多少天 2.正值 代表距离设定的时间还有多少天 说明:距离设定 ...

随机推荐

  1. C# 与 C++ 数据类型比较及结构体转换

    引自:http://www.blogjava.net/heting/archive/2010/03/20/315998.html   C++            C# =============== ...

  2. 【异常】ORA-01536: space quota exceeded for tablespace

    ### The error may exist in /src/main/resources/com/star/css/dao/sql/workflow.xml ### The error may i ...

  3. springboot+dubbo之多端口注入服务

    前面介绍了,springboot+dubbo基础整合,这篇介绍多端口注入服务. springboot使用@Bean注入dubbo服务,当你是单一的ProviderConfig实例,dubbo的@Ser ...

  4. ios 单例设计模式

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类.单例可用性非常高,用于登录用户管理等可供全局调用. + (AccountMa ...

  5. *HDU2473 并查集

    Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. GIT 操作

    1. 查看某个文件某次提交修改的内容 git show commitid  a.txt  2. git rm 和 git rm --cached  当我们需要删除暂存区或分支上的文件, 同时工作区也不 ...

  7. iOS WKWebView的javascript alert 不弹的解决方案

    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiate ...

  8. Java Basic - Annotation

    使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器.      从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理.   注解处理器类库( ...

  9. Persistent Data Structures

    原文链接:http://www.codeproject.com/Articles/9680/Persistent-Data-Structures Introduction When you hear ...

  10. rabbitmq method之basic.consume

    basic.consume指的是channel在 某个队列上注册消费者,那在这个队列有消息来了之后,就会把消息转发到给此channel处理,如果 这个队列有多个消费者,则会采用轮转的方式将消息分发给消 ...