我正在创建一个时钟系统,到目前为止,我已经能够及时获得用户时钟以及本周的用户时钟。
最后一步是让用户获得当前支付期的当前时间。
我已经创建了一个付款期限开始列表&在Excel中结束日期。
每当您使用Excel WEEKNUM()或MySQL YEARWEEK()等函数时,这些函数都会附带一个附加选项参数。
下面的链接显示了表格中这些模式之间的差异。
Excel WEEKNUM() table reference
MySQL YEARWEEK() table reference
我的问题是,如果我们每两周进行一次工资单,我在Excel WEEKNUM()中设置哪种模式对应于MySQL YEARWEEK()?
附加电子表格 clock.logic.xlsx
感谢您的帮助。
答案 0 :(得分:1)
首先是好消息:Excel
ISOWEEKNUM function对应MySQL
WEEKOFYEAR WEEK(date,3)。因此可以确定ISO周数。
但所有其他WEEK模式都只是废话,因为一年中第一周的定义不适合其他地方使用的任何逻辑。例如,采用最简单的模式,将星期日作为一周的第一天,一年的第一周是一周,一年的第一天就是。这就是Excel
s WEEKNUM function返回Return_type
1或省略。在模式0(0-53)或2(1-53)中,这应该是MySQL
s WEEK
。但到底是什么?
SELECT WEEK('2008-01-01',0);
- > 0
SELECT WEEK('2008-01-01',2);
- > 52
所以MySQL
告诉我们,2008年2月1日星期二,是在2007年第52周?
真的?为什么呢?
因为规则"第1周是第一周......今年有一个星期天" MySQL
未履行。相反,MySQL
第一周开始似乎是今年的第一个星期日。
因此,除ISO周数外,来自MySQL
的所有其他周数都是错误的。有人可能会想:让我们采用modus 0并简单地将1加到结果中。但是在2012年失败了。因为2012-01-01是星期日,MySQL
给出了0号和0号的第1周。
示例:
Excel中:
Date WEEKNUM ISOWEEKNUM
2008-01-01 1 1
2008-02-01 5 5
2008-02-03 6 5
2008-02-04 6 6
2008-12-31 53 1
2009-01-01 1 1
2009-02-01 6 5
2009-12-31 53 53
2012-01-01 1 52
2012-02-01 5 5
2012-12-31 53 1
2016-01-01 1 53
2016-02-01 6 5
2016-12-31 53 52
MySQL的:
drop table if exists tmp;
create table tmp (d date);
insert into tmp (d) values
('2008-01-01'),
('2008-02-01'),
('2008-02-03'),
('2008-02-04'),
('2008-12-31'),
('2009-01-01'),
('2009-02-01'),
('2009-12-31'),
('2012-01-01'),
('2012-02-01'),
('2012-12-31'),
('2016-01-01'),
('2016-02-01'),
('2016-12-31');
select d as 'Date', week(d,0), week(d,3) from tmp;
结果:
Date week(d,0) week(d,3)
2008-01-01 0 1
2008-02-01 4 5
2008-02-03 5 5
2008-02-04 5 6
2008-12-31 52 1
2009-01-01 0 1
2009-02-01 5 5
2009-12-31 52 53
2012-01-01 1 52
2012-02-01 5 5
2012-12-31 53 1
2016-01-01 0 53
2016-02-01 5 5
2016-12-31 52 52
答案 1 :(得分:0)
如果您想在Excel中计算当前支付期的小时数,给定两周的支付期,那么我建议您根本不需要周数(事实上,计算过于复杂,特别是在年初或年末)
如果A2:A100
中的日期和B2:B100
中的日期工作小时数以及Z2:Z10
中的付款期开始日期列表,那么您可以在当前的付款期间获得这个公式
=SUMIF(A2:A100,">="&LOOKUP(TODAY(),Z2:Z10),B2:B100)
我想你的实际设置更复杂,但上面的一些变化可能仍然可以使用