我正在努力弄清楚如何将特定时间戳记下的发票设置为 future 两周后的星期五。这是一个示例数据,说明我希望如何将每笔交易设置为在未来两周的星期五支付。我有一些发票也需要在星期四开具。我如何获取本周提出的每张发票的时间戳,将日期设置为两周星期五?还是星期四?
我尝试过将日期设置为两周后的星期五,但出错了,因为它从星期日而不是星期五开始一周
DATE_ADD(timestamp, INTERVAL (25 - WEEKDAY(timestamp)) DAY) AS pd
Timestamp Due date
2015-01-01 2015-01-22
2015-01-02 2015-01-22
2015-01-03 2015-01-22
2015-01-04 2015-01-22
2015-01-05 2015-01-22
2015-01-06 2015-01-22
2015-01-07 2015-01-22
2015-01-08 2015-01-29
2015-01-09 2015-01-29
2015-01-10 2015-01-29
2015-01-11 2015-01-29
2015-01-12 2015-01-29
2015-01-13 2015-01-29
2015-01-14 2015-01-29
最佳答案
使用
DATE_ADD(DATE_ADD( <<your_date_here>> , INTERVAL 2 WEEK),INTERVAL (6-DAYOFWEEK(<<your_date_here>>)) DAY)
应该可以解决问题(如果你想要的是 your_date + 2 周和下周五)。
如果你想要的是 future 的两个星期五,它应该是:
DATE_ADD(DATE_ADD( <<your_date_here>>,INTERVAL (6-DAYOFWEEK(<<your_date_here>>)) DAY) , INTERVAL 2 WEEK)
这对你有用吗?
稍后编辑:
SELECT DATE_ADD( DATE_ADD( '<<your date here>>', INTERVAL IF(DAYOFWEEK('<<your date here>>') > 5 ,16 , 14) DAY ), INTERVAL 6 - DAYOFWEEK( DATE_ADD( '<<your date here>>', INTERVAL IF(DAYOFWEEK('<<your date here>>')>5,16,14) DAY )) DAY );
我解释一下:
DATE_ADD( '<< 您的日期在这里>>', INTERVAL IF(DAYOFWEEK('<< 您的日期在这里>>') >5 ,16 , 14)
如果一周中的某一天是从周日到周四,则添加 14 天;如果是周五或周六,则添加 16 天(以便强制进入下周。
现在,您再次添加到达星期五所需的天数。
您原来问题中的示例是错误的: 2015 年 1 月 1 日是星期四,因此添加 14 天(2015 年 1 月 15 日)+ 1,这样就到达星期五(2015 年 1 月 16 日)。 2015 年 1 月 2 日是星期五,但根据您的意愿,您认为星期五是工作周的开始,因此您正在寻找 future 的第三个星期五(2015 年 1 月 23 日)。 2015年1月3日 -> 2015年1月23日 2015年1月4日 -> 2015年1月23日 。 。 。 2015年1月8日 -> 2015年1月23日
2015年1月9日 -> 2015年1月30日 2015年1月10日 -> 2015年1月30日 ... 等等等等。
关于mysql - 如何获取两周内特定日期的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141649/