擅长:python、mysql、java
<p>一种方法是只模拟每天步行,除了事先取消5(整周)的倍数</p>
<pre><code>def end_by_weekdays(start, weekdays):
weeks, weekdays = divmod(weekdays, 5)
days = 0
startday = start.weekday()
while weekdays > 0:
days += 1
if (startday + days) % 7 < 5:
weekdays -= 1
return start + timedelta(days=days + 7*weeks)
</code></pre>
<p>这将输出以下内容:</p>
<pre><code>>>> end_by_weekdays(date(2017,1,11), 30)
datetime.date(2017, 2, 22)
</code></pre>
<p>请注意,它输出的是预期日期的22日,也就是21日,因为我将开始日期排除在外。如果你想的话,很容易改变。你知道吗</p>
<p>然后你可以用这个日期来看看需要多少周</p>
<pre><code>>>> start = date(2017,1,11)
>>> (end_by_weekdays(start, 30) - start).days / 7
6.0
</code></pre>
<p>或者让<code>end_by_weekdays()</code>直接返回天数,以避免这种反复。你知道吗</p>
<p><em>注意:我在代码中使用了python3。最后一个例子将在python2上进行整数除法,并只输出<code>6</code></p>