求给定一个日期,算出该日期在那个月第几周的函数

时间:2022-02-21 14:05:04
求给定一个日期,算出该日期在那个月第几周的函数,用JS实现.高手指导指导我,多谢

25 个解决方案

#1


<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c);
var day = date.getDay();
var today = date.getDate();
if (day == 0) day = 7;
return (today + day) / 7;
}
alert(reDate(2007, 03, 23));
</script>

#2


@.@
晕。。等我改下。。

#3


var date1 = new Date();
var date2 = new Date(date1.getFullYear(),date1.getMonth(),1);
var weekcount = Math.ceil((date1.getDate() + date2.getDay()) / 7);
alert("今天是本月第" + weekcount + "周");

#4


<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c);
var day = date.getDay(), today = date.getDate(), d;
if (day == 0) day = 7;
d = today - Math.abs((today - day) % 7 - (today > day ? 0 : 1));
return Math.ceil(d / 7) + 1;
}
alert(reDate(2007, 03, 23));
alert(reDate(2007, 02, 15));
</script>

#5


//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+(new Date(this.getFullYear(),this.getMonth(),1)).getDay())/7);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数

#6


需要的话加个简单的方法就可以了 

//函数 获取输入的参数的日期的星期数
function weekcount(year,month,day)//参数 年 月 日
{
var date1 = new Date(year,month-1,day);
date1.getWeek();
return weekcount;
}

#7


@.@
晕。。修改了下。。
to ls
貌似忘记判断星期日的情况了。。
<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c),
day = date.getDay(), today = date.getDate(),
d = today - Math.abs((today - day) % 7 - (today > day ? 0 : 1));
return Math.ceil(d / 7) + 1;
}
alert(reDate(2007, 03, 23));
alert(reDate(2007, 02, 4));
</script>

#8


..............大哥写得那么复杂 很难算吗?
今天的日数 加上本月第一周缺少的天数 除以7 用Math.ceil整数即可

#9


恩,不错!
学习

#10


。。。
方法不同嘛。
开始没考虑两个日期对象的说。。。
我在改下..

#11


<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c);
return Math.ceil((c + 7 - (date.getDay() || 7)) / 7);
}
alert(reDate(2007, 3, 4));
</script>
这个没问题吧?(date.getDay() || 7)是为了判断星期日的情况。。
否则星期日会被算到下一个星期里去。。。

计算方法。。
[天数 + 星期总数(7) - 当前星期数] 除以7 求Math.ceil值

#12


星期日本来就是一个星期的开始

#13


中国人当星期日是周末。

#14


@.@
噢。。也对。。。我们这里星期日上班。。。就星期六放一风。。。

#15


伤心。。。过了这周连星期六都没啦。。
T_T

#16


周日上班的时候你就当自己是老外,周六周日都上班的时候你就当自己是外星人好了。哈哈

#17


实在不行就判断一下啦 那也就是多加个1的问题 没多复杂

//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+ 1 +(new Date(this.getFullYear(),this.getMonth(),1)).getDay())/7);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数

#18


厄.........不好意思是减1

//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+(new Date(this.getFullYear(),this.getMonth(),1)).getDay() - 1)/7);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数

#19


算法还是一样 减掉一天而已

#20


忽忽。昂,米办法。。
一周上6天班。。然后剩下的那天貌似需要补课的说。。

#21


555555 最多只能连续回复3次  我知道错了 可惜改不了 
bug 如果是这个个月第一天刚好是星期天时会得到0 

//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+(new Date(this.getFullYear(),this.getMonth(),1)).getDay() - 1)/7 || 1);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数


仔细想了想 用2个日期元素 效率比较低 还是你的好 我认输了

#22


忽忽。。
return Math.ceil((c + 7 - (date.getDay() || 7)) / 7);
感觉这个比较好的说。。
是我太执着了。。
主要原因是第一次回复比较白痴。。所以我感到郁闷。。又顶了几贴。。
以后不干这事了。。^o^
哈哈。。生了星星就可以连续回复了。。没有三次的限制的说。。。加油噢。。
具体能回复多少次我就不太清楚了。。 (不敢测试的说。。。被删除回复貌似减信誉的样子。。)

#23


http://www.blogjava.net/mxx/archive/2006/09/27/72159.html

常用公历日期处理程序
//根据日期返回该日期所在年的周数
Date.prototype.getWeekNum = function (){
    var dat = new Date(this.getFullYear(),0,1);
    var week = dat.getDay();
    week = (week==0?7:week);
    var days = this.calDateDistance(dat,"dd")+1;
    return ((days + 6 - this.getDay() - 7 + week)/7);
}
得到一号是第几周,再算出那天是第几周,就知道是当月第几周了

#24


你的算法有问题,我4.30号的时候都算出了6

#25



        /// <summary>
        /// 获取日期在当前月的第几周
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string getWeekIndex(DateTime dt)
        {
            DateTime weekbegain = new DateTime();
            DateTime weekend = new DateTime();
            int weekCount = 0;
            int MweekIndex = 0;

            //循环取出 月 的每周 开始和结束时间,判断dt所在位置
            for (int i = 1; i < 10; i++)
            {
                //调用方法,获取每周的开始结束时间
                GetMonthWeek(dt, out weekCount, i, out weekbegain, out weekend);
                //如果 dt在某周的时间段内,则起所在周的值为i,退出循环
                if (dt.Date.Ticks >= weekbegain.Date.Ticks && dt.Date.Ticks <= weekend.Date.Ticks)
                {
                    MweekIndex = i;
                    break;
                }
            }
            //如果周索引在大于0且小于等于4之间,(通常每月只有周)
            if (MweekIndex <= 4 && MweekIndex > 0)
            {
                return dt.Year + "年" + dt.Month + "月,第" + MweekIndex + "周("+dt.ToShortDateString()+")";
            }
            else
            {
                //如果周索引等于5,切周结束时间小于等于月末,则将其算问第5周
                if (MweekIndex >= 5 && dt.Date.Ticks <= Convert.ToDateTime(dt.Date.Year + "-" + dt.Date.Month + "-1").Date.AddMonths(1).AddDays(-1).Date.Ticks)
                {
                    return dt.Year + "年" + dt.Month + "月,第" + MweekIndex + "周(" + dt.ToShortDateString() + ")";
                }
                //如果要将日期算如下一个月,且当前月份为12月,则须添加年份
                if ((dt.Month + 1) > 12)
                {
                    return (dt.Year + 1) + "年" + 1 + "月,第" + 1 + "周(" + dt.ToShortDateString() + ")";
                }
                else
                {
                    return dt.Year + "年" + (dt.Month + 1) + "月,第" + 1 + "周(" + dt.ToShortDateString() + ")";
                }
            }
        }

        /// <summary>
        /// 获取某年某月的周数(即某年的某月有几周)和某一周的开始时间与结束时间。周从周一开始计算
        /// 说明:月的开头1号若不足一周,从上一个月补上,月的末尾若不足一周,则充当下个月的第一周部分
        /// write by dreamzgj 2010-2-26
        /// </summary>
        /// <param name="dTime">时间</param>
        /// <param name="WeekCount" >返回该月的周数</param>
        /// <param name="WeekIndex">周索引(即该月的第几周)</param>
        /// <param name="WeekBeginDate">返回该周的开始时间</param>
        /// <param name="WeekEndDate">返回该周的结束时间</param>
        public static void GetMonthWeek(DateTime dTime, out int WeekCount, int MWeekIndex, out DateTime WeekBeginDate, out DateTime WeekEndDate)
        {
            //该月的第一天日期
            DateTime MFirstDay = Convert.ToDateTime(dTime.Date.Year + "-" + dTime.Date.Month + "-1");
            //该月第一天的周几(如:周一,周二...)
            int WeekIndex = (int)MFirstDay.DayOfWeek;
            if (WeekIndex == 0)
            {
                WeekIndex = 7;
            }
            //该月第一周的开始时间(可能为上个月的某一天)
            DateTime FirstWeekBeginDate = MFirstDay.Date.AddDays(Convert.ToDouble(-WeekIndex + 1));
            //该月第一周的结束时间
            DateTime FirstWeekEndDate = FirstWeekBeginDate.AddDays(7).AddSeconds(-1);

            //该月的最后一天时期
            DateTime MLastDay = Convert.ToDateTime(dTime.Date.Year + "-" + dTime.Date.Month + "-1").Date.AddMonths(1).AddDays(-1);
            //排去第一周剩下的天数
            int DayCount = MLastDay.Date.Day - FirstWeekEndDate.Date.Day;
            //该月的周数
            WeekCount = DayCount / 7 + 1;

            if (MWeekIndex > WeekCount)
                MWeekIndex = WeekCount;
            if (WeekIndex < 1)
                MWeekIndex = 1;

            //计算该周的开始时间和结束时间
            WeekBeginDate = FirstWeekBeginDate.AddDays((MWeekIndex - 1) * 7);
            WeekEndDate = FirstWeekEndDate.AddDays((MWeekIndex - 1) * 7);
        }

#1


<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c);
var day = date.getDay();
var today = date.getDate();
if (day == 0) day = 7;
return (today + day) / 7;
}
alert(reDate(2007, 03, 23));
</script>

#2


@.@
晕。。等我改下。。

#3


var date1 = new Date();
var date2 = new Date(date1.getFullYear(),date1.getMonth(),1);
var weekcount = Math.ceil((date1.getDate() + date2.getDay()) / 7);
alert("今天是本月第" + weekcount + "周");

#4


<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c);
var day = date.getDay(), today = date.getDate(), d;
if (day == 0) day = 7;
d = today - Math.abs((today - day) % 7 - (today > day ? 0 : 1));
return Math.ceil(d / 7) + 1;
}
alert(reDate(2007, 03, 23));
alert(reDate(2007, 02, 15));
</script>

#5


//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+(new Date(this.getFullYear(),this.getMonth(),1)).getDay())/7);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数

#6


需要的话加个简单的方法就可以了 

//函数 获取输入的参数的日期的星期数
function weekcount(year,month,day)//参数 年 月 日
{
var date1 = new Date(year,month-1,day);
date1.getWeek();
return weekcount;
}

#7


@.@
晕。。修改了下。。
to ls
貌似忘记判断星期日的情况了。。
<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c),
day = date.getDay(), today = date.getDate(),
d = today - Math.abs((today - day) % 7 - (today > day ? 0 : 1));
return Math.ceil(d / 7) + 1;
}
alert(reDate(2007, 03, 23));
alert(reDate(2007, 02, 4));
</script>

#8


..............大哥写得那么复杂 很难算吗?
今天的日数 加上本月第一周缺少的天数 除以7 用Math.ceil整数即可

#9


恩,不错!
学习

#10


。。。
方法不同嘛。
开始没考虑两个日期对象的说。。。
我在改下..

#11


<script type="text/javascript">
function reDate(a, b, c) {
var date = new Date(a, b - 1, c);
return Math.ceil((c + 7 - (date.getDay() || 7)) / 7);
}
alert(reDate(2007, 3, 4));
</script>
这个没问题吧?(date.getDay() || 7)是为了判断星期日的情况。。
否则星期日会被算到下一个星期里去。。。

计算方法。。
[天数 + 星期总数(7) - 当前星期数] 除以7 求Math.ceil值

#12


星期日本来就是一个星期的开始

#13


中国人当星期日是周末。

#14


@.@
噢。。也对。。。我们这里星期日上班。。。就星期六放一风。。。

#15


伤心。。。过了这周连星期六都没啦。。
T_T

#16


周日上班的时候你就当自己是老外,周六周日都上班的时候你就当自己是外星人好了。哈哈

#17


实在不行就判断一下啦 那也就是多加个1的问题 没多复杂

//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+ 1 +(new Date(this.getFullYear(),this.getMonth(),1)).getDay())/7);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数

#18


厄.........不好意思是减1

//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+(new Date(this.getFullYear(),this.getMonth(),1)).getDay() - 1)/7);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数

#19


算法还是一样 减掉一天而已

#20


忽忽。昂,米办法。。
一周上6天班。。然后剩下的那天貌似需要补课的说。。

#21


555555 最多只能连续回复3次  我知道错了 可惜改不了 
bug 如果是这个个月第一天刚好是星期天时会得到0 

//日期类扩展 getWeek() 获取当前日期的星期数
Date.prototype.getWeek = function(){
return Math.ceil((this.getDate()+(new Date(this.getFullYear(),this.getMonth(),1)).getDay() - 1)/7 || 1);
}

var date = new Date(); //创建日期实例
alert(date.getWeek());//获取星期数


仔细想了想 用2个日期元素 效率比较低 还是你的好 我认输了

#22


忽忽。。
return Math.ceil((c + 7 - (date.getDay() || 7)) / 7);
感觉这个比较好的说。。
是我太执着了。。
主要原因是第一次回复比较白痴。。所以我感到郁闷。。又顶了几贴。。
以后不干这事了。。^o^
哈哈。。生了星星就可以连续回复了。。没有三次的限制的说。。。加油噢。。
具体能回复多少次我就不太清楚了。。 (不敢测试的说。。。被删除回复貌似减信誉的样子。。)

#23


http://www.blogjava.net/mxx/archive/2006/09/27/72159.html

常用公历日期处理程序
//根据日期返回该日期所在年的周数
Date.prototype.getWeekNum = function (){
    var dat = new Date(this.getFullYear(),0,1);
    var week = dat.getDay();
    week = (week==0?7:week);
    var days = this.calDateDistance(dat,"dd")+1;
    return ((days + 6 - this.getDay() - 7 + week)/7);
}
得到一号是第几周,再算出那天是第几周,就知道是当月第几周了

#24


你的算法有问题,我4.30号的时候都算出了6

#25



        /// <summary>
        /// 获取日期在当前月的第几周
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string getWeekIndex(DateTime dt)
        {
            DateTime weekbegain = new DateTime();
            DateTime weekend = new DateTime();
            int weekCount = 0;
            int MweekIndex = 0;

            //循环取出 月 的每周 开始和结束时间,判断dt所在位置
            for (int i = 1; i < 10; i++)
            {
                //调用方法,获取每周的开始结束时间
                GetMonthWeek(dt, out weekCount, i, out weekbegain, out weekend);
                //如果 dt在某周的时间段内,则起所在周的值为i,退出循环
                if (dt.Date.Ticks >= weekbegain.Date.Ticks && dt.Date.Ticks <= weekend.Date.Ticks)
                {
                    MweekIndex = i;
                    break;
                }
            }
            //如果周索引在大于0且小于等于4之间,(通常每月只有周)
            if (MweekIndex <= 4 && MweekIndex > 0)
            {
                return dt.Year + "年" + dt.Month + "月,第" + MweekIndex + "周("+dt.ToShortDateString()+")";
            }
            else
            {
                //如果周索引等于5,切周结束时间小于等于月末,则将其算问第5周
                if (MweekIndex >= 5 && dt.Date.Ticks <= Convert.ToDateTime(dt.Date.Year + "-" + dt.Date.Month + "-1").Date.AddMonths(1).AddDays(-1).Date.Ticks)
                {
                    return dt.Year + "年" + dt.Month + "月,第" + MweekIndex + "周(" + dt.ToShortDateString() + ")";
                }
                //如果要将日期算如下一个月,且当前月份为12月,则须添加年份
                if ((dt.Month + 1) > 12)
                {
                    return (dt.Year + 1) + "年" + 1 + "月,第" + 1 + "周(" + dt.ToShortDateString() + ")";
                }
                else
                {
                    return dt.Year + "年" + (dt.Month + 1) + "月,第" + 1 + "周(" + dt.ToShortDateString() + ")";
                }
            }
        }

        /// <summary>
        /// 获取某年某月的周数(即某年的某月有几周)和某一周的开始时间与结束时间。周从周一开始计算
        /// 说明:月的开头1号若不足一周,从上一个月补上,月的末尾若不足一周,则充当下个月的第一周部分
        /// write by dreamzgj 2010-2-26
        /// </summary>
        /// <param name="dTime">时间</param>
        /// <param name="WeekCount" >返回该月的周数</param>
        /// <param name="WeekIndex">周索引(即该月的第几周)</param>
        /// <param name="WeekBeginDate">返回该周的开始时间</param>
        /// <param name="WeekEndDate">返回该周的结束时间</param>
        public static void GetMonthWeek(DateTime dTime, out int WeekCount, int MWeekIndex, out DateTime WeekBeginDate, out DateTime WeekEndDate)
        {
            //该月的第一天日期
            DateTime MFirstDay = Convert.ToDateTime(dTime.Date.Year + "-" + dTime.Date.Month + "-1");
            //该月第一天的周几(如:周一,周二...)
            int WeekIndex = (int)MFirstDay.DayOfWeek;
            if (WeekIndex == 0)
            {
                WeekIndex = 7;
            }
            //该月第一周的开始时间(可能为上个月的某一天)
            DateTime FirstWeekBeginDate = MFirstDay.Date.AddDays(Convert.ToDouble(-WeekIndex + 1));
            //该月第一周的结束时间
            DateTime FirstWeekEndDate = FirstWeekBeginDate.AddDays(7).AddSeconds(-1);

            //该月的最后一天时期
            DateTime MLastDay = Convert.ToDateTime(dTime.Date.Year + "-" + dTime.Date.Month + "-1").Date.AddMonths(1).AddDays(-1);
            //排去第一周剩下的天数
            int DayCount = MLastDay.Date.Day - FirstWeekEndDate.Date.Day;
            //该月的周数
            WeekCount = DayCount / 7 + 1;

            if (MWeekIndex > WeekCount)
                MWeekIndex = WeekCount;
            if (WeekIndex < 1)
                MWeekIndex = 1;

            //计算该周的开始时间和结束时间
            WeekBeginDate = FirstWeekBeginDate.AddDays((MWeekIndex - 1) * 7);
            WeekEndDate = FirstWeekEndDate.AddDays((MWeekIndex - 1) * 7);
        }