博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
钻牛角尖の根据时间计算周次
阅读量:5306 次
发布时间:2019-06-14

本文共 3947 字,大约阅读时间需要 13 分钟。

前言:为什么我会走上程序员这条路,明知道脑子不够用,还整天写代码,也不知道写的什么,只知道复制粘贴,嗨。只想说一句“Fuck”.

来说下我脑子如何瞬间变浆糊的。

项目中要求根据日期计算当前选择日期是一年中的第几周,好吧,大家仔细看:

JS版本:(用的是My97datePicker时间选择器)

1 $("#<%=tbWeekDate.ClientID%>").click(function () { 2                 WdatePicker({ 3                     dateFmt: 'yyyy-MM-dd', 4                     isShowWeek: true, 5                     firstDayOfWeek: 1, 6                     onpicked: function () { 7                         var value = $("#<%=tbWeekDate.ClientID%>").val(); 8                         var dt = new Date(value); 9                         var sumDay = 0;10                         for (var i = 1; i < dt.getMonth() + 1 ; i++) {11                             sumDay += new Date(dt.getFullYear(), i, 0).getDate();12                         }13                         sumDay += dt.getDate();14                         var firstDate = new Date(dt.getFullYear() + "-01-01");15                         alert(firstDate.getDay());16                         var diff = firstDate.getDay() - 1;17                         if (diff < 0) {18                             diff = 6;19                         }20                         sumDay = sumDay + diff;21                         var week = Math.ceil(sumDay / 7.0);22                         $("#<%=tbWeekValue.ClientID%>").val(week);23                         $("#<%=hfWeekValue.ClientID%>").val(week);24                     }25                 });26             });

我来解释下代码:

首先先根据当前选择的日期获取月份,比如选择的是2013-10-25,那么当前是10月,循环这10个月份,获取这个10个月份的总天数,代码如下:

1               var sumDay = 0;2                         for (var i = 1; i < dt.getMonth() + 1 ; i++) {3                             sumDay += new Date(dt.getFullYear(), i, 0).getDate();4                         }5                         sumDay += dt.getDate();

好吧,犯二开始了:

我就在想为啥要在总天数的基础上加上diff的天数呢,比如十月二十五号是今天的289天,那我直接除以7不就是今天的第几周嘛,我看了好久都没明白,自己的思路有问题?想错了?哪里少根筋了?没啊

端起杯子喝口水,Fuck,果真是脑子进水了。其实这个算周不是根据总天数除以7算的,而是根据时间选择器来的,比如2012-12-31,时间选择器上是2013年的第一周,但是根据需求,我要这个日期是2012年的第54周,所以比如我2013-1-1号是星期二,所以我要再加上一天,这就是为什么要写

1                var firstDate = new Date(dt.getFullYear() + "-01-01");2                          alert(firstDate.getDay());3                          var diff = firstDate.getDay() - 1;

这几行代码了,其实还是按照时间选择器的周的计算方法来的,只是把年末和年初的周次分别计算到改年的周次和上年的周次里面,通俗点讲吧,就是吧周二加上一天当成是周一来计算。嗨,发现自己真的犯二,其实我现在一边写还是一边晕,估计我写的你们也没看懂。哈哈

 

好吧,既然写了再来一个C#版的吧,代码如下:

1  int WeekOfYear() 2         { 3             DateTime date = Convert.ToDateTime("2013-10-25"); 4             DayOfWeek dw = (Convert.ToDateTime(string.Format("{0}-1-1 0:0:0", date.Year.ToString()))).DayOfWeek; 5             int day = 0; 6             switch (dw) 7             { 8                 case DayOfWeek.Monday: 9                     {10                         day = 0;11                         break;12                     }13                 case DayOfWeek.Tuesday:14                     {15                         day = 1;16                         break;17                     }18                 case DayOfWeek.Wednesday:19                     {20                         day = 2;21                         break;22                     }23                 case DayOfWeek.Thursday:24                     {25                         day = 3;26                         break;27                     }28                 case DayOfWeek.Friday:29                     {30                         day = 4;31                         break;32                     }33                 case DayOfWeek.Saturday:34                     {35                         day = 5;36                         break;37                     }38                 case DayOfWeek.Sunday:39                     {40                         day = 6;41                         break;42                     }43             }44             int week = (date.DayOfYear + day) / 7 + 1;45 46             return week;47         }

 

转载于:https://www.cnblogs.com/xuguoming/p/JavaScript_%e5%91%a8%e6%ac%a1%e8%ae%a1%e7%ae%97.html

你可能感兴趣的文章
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>
zabbix监控日志文件
查看>>
正则表达式
查看>>
pip install torch on windows, and the 'from torch._C import * ImportError: DLL load failed:' s...
查看>>
环套树
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
eclipse的调试方法的简单介绍
查看>>
加固linux
查看>>
IPSP问题
查看>>
HNU 10362 A+B for Input-Output Practice (II)
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>