我需要当前的周数,如果我没有完全弄错,现在是第51周?但是,当在控制台中测试时,我得到了这个.
Time.now
=> 2013-12-19 11:08:25 +0100
Time.now.strftime('%U')
=> "50"
Date.today
=> Thu, 19 Dec 2013
Date.today.strftime("%U").to_i
=> 50
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我正在尝试在JavaScript中编写一个函数来返回给定日期的周数,并且我正在针对我在网络上找到的两个函数测试我的代码,即
http://techblog.procurios.nl/k/n618/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
http://www.epoch-calendar.com/support/getting_iso_week.html
Run Code Online (Sandbox Code Playgroud)
我从1970年1月1日开始测试了30,000天,我和第二个来源有一些不同.第一种差异是某些情况下该来源返回零周的情况,这显然是错误的.然后对于其他一些情况,它返回第53周,我的函数返回第1周.这些是日期
他们都看起来像这样
Dec Jan
29 30 31 01 02 03 04 05 06 07 08 09 10
Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th
^^ ^^
Run Code Online (Sandbox Code Playgroud)
根据ISO-8601
1月3日是2013年的第一个星期四,因此1月3日是第1周(2013年)的一天.第1周(2013年)的开始是在星期四之前的星期一,即2012年12月31日.
因此,2012年12月31日必须是第1周.
然而...
我错过了什么吗?困扰我的是,它只发生在如此少的日期(70年或更长时间内的3个日期)
我必须做一些报告,并且必须在Java和MySQL的任何日期计算周,但他们有不同的算法.
首先,请注意,通过一些方法,在某一年结束的某些日子里,是明年的第一周.示例:2012-12-31是2013年的第1周(我不记得确切的年份,但它就是这样).所以我必须计算一个约会的正确的一周
在Java中,它基于2个标准,取决于区域设置:
第一周的最短日期(1或4)
Calendar cal = Calendar.getInstance();
int javaWeek = cal.get(Calendar.WEEK_OF_YEAR);
int weekYear = cal.getWeekYear();
Run Code Online (Sandbox Code Playgroud)在MySQL中,它基于2个标准依赖于模式(0到7):
第一周的最小天数为4或第一周包含一周的第一天
SELECT WEEK('2012-12-12', 1);
SELECT YEARWEEK('2012-12-12', 1);
Run Code Online (Sandbox Code Playgroud)在MySQL中,一些模式将计算一周的奇怪结果,例如,一年有0周只有1天,其他几周有整整7天(我认为第1周真的是第一周,第0周是前周或某事).我会忽略这些模式
方案是:我在Java中计算了我的系统区域设置(带有设置:getFirstDayOfWeek()==SUNDAY和的区域设置getMinimalDaysInFirstWeek==1)的日期基础列表的周,我想在MySQL中使用相同的结果进行计算
但是我在MySQL中尝试所有8种模式,没有匹配.我失败了,因为在MySQL中没有第一周最小日的模式计算基础是1(只有一些模式有4),所以我手动setMinimalDaysInFirstWeek(4)和MySQL中的模式6匹配Java中的结果
(我必须编写测试,比较Java和MySQL中2年内每天的结果)
所以我的解决方案是,我必须修复 setMinimalDaysInFirstWeek(4),如果getFirstDayOfWeek()是星期一,我在MySQL中选择模式3,如果 getFirstDayOfWeek()是SUNDAY,我在MySQL中选择模式6.我认为这只是一个临时解决方案而且非常奇怪.
还有一个问题,我真的害怕如果我的系统从MySQL变为其他RDBMS,它将有其他方法而我无法处理所有这些(Oracle中的示例没有WEEK功能).那么有什么方法可以让calc周满足很多RDBMS吗?
我有一个想法是在一个平台(Java或MySQL)中的计算周,然后将结果传递给另一个:
如果从Java传递到MySQL,我将结果传递给查询字符串,或者构建一个包含我的结果的表
如果从MySQL传递给Java,我必须编写一个从Java调用它的过程,并且必须解决问题"找到计算方法满足许多RDBMS的方法"
但我必须计算大量的日期,这些都不能满足我,任何人都有想法解决我的问题?
我的vbnet扩展日期时间选择器有问题.当元素传递到新年(2016)时,左侧显示的周数是错误的.
我有一个"datetimepicker",它不是默认组件,它在这里下载:http: //www.codeproject.com/Articles/17063/ExtendedDateTimePicker-control-with-week-numbers
我不明白为什么日历从53转到2而不是53到1.
也许其中一个人有同样的错误.谢谢你的时间.
根据每周每年的公式https://en.wikipedia.org/wiki/ISO_week_date,您应该能够找到每周53周的公式.我已经将公式复制到PHP中,但它似乎在2020年左右回归52周而不是53周.
function weeks($year){
$w = 52;
$p = ($year+($year/4)-($year/100)+($year/400))%7;
if ($p == 4 || ($p-1) == 3){
$w++;
}
return $w." ".$p;
}
for ($i = 2000; $i <= 2144; $i++) {
echo $i." (".weeks($i).") | ";
}
Run Code Online (Sandbox Code Playgroud)
来自维基百科
以下71年的400年周期有53周(371天); 未列出的年份有52周(364天); 当前年份增加2000:
004,009,015,020,026,032,037,043,048,054,060,065,071,076,082,088,093,099,105,111,116,122,128,133,139, 144
我知道我可以使用date()函数获取给定年份的总周数,但我只是想知道是否有人知道数学,因为维基百科上的公式似乎是错误的.
编辑工作代码
function p($year){
return ($year+floor($year/4)-floor($year/100)+floor($year/400))%7;
}
function weeks($year){
$w = 52;
if (p($year) == 4 || p($year-1) == 3){
$w++;
}
return $w; // returns the number of weeks in that …Run Code Online (Sandbox Code Playgroud) 要么我不理解方法getActualMaximum(int)或字段WEEK_OF_YEAR,要么涉及到Sun漏洞(或全部三个)......有人可以向我解释为什么(至少在德语区域设置中 ......)以下代码:
Locale.setDefault( Locale.GERMAN );
Calendar c = Calendar.getInstance();
c.set( Calendar.YEAR, 2010 );
c.set( Calendar.MONTH, 0 );
c.set( Calendar.DAY_OF_MONTH, 1 );
System.out.println("max: "+c.getActualMaximum( Calendar.WEEK_OF_YEAR ));
System.out.println("actual: "+c.get( Calendar.WEEK_OF_YEAR ));
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
max: 52
actual: 53
Run Code Online (Sandbox Code Playgroud)
这是Javadoc getActualMaximum(int):
给定此Calendar的时间值,返回指定日历字段可能具有的最大值.例如,MONTH字段的实际最大值在某些年份为12,在希伯来日历系统中为其他年份的13.
编辑
情节变粗.在英语语言环境(-Duser.language=en -Duser.country=us)中,输出为:
max: 52
actual: 1
Run Code Online (Sandbox Code Playgroud)
似乎指出它是德国语言环境的Sun bug?
我在Flex Date对象中找不到一个方法来获取一年中的一周(1到52)
找到这个的最佳方法是什么?对于诸如Java中的JodaTime之类的日期操作,是否有任何有用的flex库.
我有一个查询(用于bug tracker.net),按状态计算每周的错误数.但查询返回周数,我真正想要的是一周的第一个日期
select datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date)))
as [week], bg_status , st_name as [status], count(*) as [count]
from bugs inner join statuses on bg_status = st_id
group by datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))),
bg_status, st_name
order by [week], bg_status
Run Code Online (Sandbox Code Playgroud)
得到周数的部分是
datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))) as [week]
Run Code Online (Sandbox Code Playgroud)
它返回此输出:
week bg_status status count
----------- ----------- --------------------------------------------- ------
22 1 new 1
22 5 closed 32
Run Code Online (Sandbox Code Playgroud)
但最好是说每周的第一个日期,例如01-01-2010,然后是08-01-2010等
问题不是重复如何从SQL Server中的周数获得"周开始日期"和"周结束日期"?(回答说如何从一个星期开始,而不是从一周的数字开始)
不是从周数计算日期的重复(问题请求c#)
从提供的日期获取第一周的日期(问题请求javascript)不重复
我做了搜索,但找不到这个问题的答案SQL Server(2010如果重要)
本周我已经算上了铭文.但我需要在过去12周内每周计算一次铭文,并将其发送到阵列中.
我的实际要求是:
SELECT COUNT(*) FROM PERSON
YEAR(date_inscription) = YEAR(NOW())
AND WEEK(date_inscription) = WEEK(NOW())
Run Code Online (Sandbox Code Playgroud) week-number ×10
date ×4
java ×3
calendar ×2
actionscript ×1
apache-flex ×1
count ×1
datetime ×1
dayofweek ×1
javascript ×1
macos ×1
math ×1
mysql ×1
php ×1
ruby ×1
sql ×1
sql-server ×1
t-sql ×1
vb.net ×1