Foxtable(狐表)用户栏目专家坐堂 → 合同期为2021-03-01至2025-08-31,如何编程自动得出每年合同内是多少个月。


  共有51人关注过本帖树形打印复制链接

主题:合同期为2021-03-01至2025-08-31,如何编程自动得出每年合同内是多少个月。

帅哥哟,离线,有人找我吗?
myredsun
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:158 积分:1673 威望:0 精华:0 注册:2014/2/17 16:11:00
合同期为2021-03-01至2025-08-31,如何编程自动得出每年合同内是多少个月。  发帖心情 Post By:2025/2/28 16:01:00 [只看该作者]

合同期为2021-03-01至2025-08-31,如何编程自动得出每年合同内是多少个月?请教。


 回到顶部
帅哥哟,离线,有人找我吗?
myredsun
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:158 积分:1673 威望:0 精华:0 注册:2014/2/17 16:11:00
  发帖心情 Post By:2025/2/28 16:24:00 [只看该作者]

在 **Foxtable** 中,可以通过以下代码实现合同期内每年包含的月数计算。Foxtable 支持 VB.NET 语法,因此我们可以利用日期函数和循环来实现。

---

### 代码实现
```vbnet
' 定义合同起止日期
Dim startDate As Date = New Date(2021, 3, 1)
Dim endDate As Date = New Date(2025, 8, 31)

' 创建一个字典来存储年份和对应的月数
Dim yearMonths As New Dictionary(Of Integer, Integer)()

' 从开始日期逐月遍历到结束日期
Dim currentDate As Date = startDate
While currentDate <= endDate
    ' 提取年份
    Dim year As Integer = currentDate.Year
    
    ' 如果年份不在字典中,初始化为0
    If Not yearMonths.ContainsKey(year) Then
        yearMonths(year) = 0
    End If
    
    ' 增加该年份的月数
    yearMonths(year) += 1
    
    ' 跳转到下个月的第一天(确保跨年正确处理)
    currentDate = currentDate.AddMonths(1)
End While

' 输出结果到表格或弹窗
Dim tbl As Table = Tables.Add("合同年度月数统计")
tbl.Cols.Add("年度", GetType(Integer))
tbl.Cols.Add("月数", GetType(Integer))

For Each kvp As KeyValuePair(Of Integer, Integer) In yearMonths
    Dim row As Row = tbl.AddRow()
    row("年度") = kvp.Key
    row("月数") = kvp.Value
Next

' 显示结果表
tbl.Show()
```

---

### 代码说明
1. **日期处理**:
   - `startDate` 和 `endDate` 定义合同起止日期。
   - 使用 `currentDate.AddMonths(1)` 逐月递增,确保正确跨年。

2. **字典存储**:
   - `yearMonths` 字典存储每年的月数。
   - 如果某一年尚未记录,初始化该年的月数为0,然后逐月累加。

3. **结果输出**:
   - 创建一个新表 `合同年度月数统计`,存储年份和对应月数。
   - 遍历字典,将结果写入表格并显示。

---

### 运行结果
生成的表格如下:

| 年度 | 月数 |
|------|------|
| 2021 | 10   |
| 2022 | 12   |
| 2023 | 12   |
| 2024 | 12   |
| 2025 | 8    |

---

### 扩展说明
1. **如何运行代码**:
   - 在 Foxtable 中新建一个项目,打开“代码窗口”(快捷键 `F12`)。
   - 将代码粘贴到代码窗口中,点击运行(或按 `F5`)。

2. **日期格式调整**:
   - 如果需要动态输入日期,可以改用以下代码:
     ```vbnet
     Dim startDate As Date = DateInput("请输入合同开始日期(格式:yyyy-MM-dd)")
     Dim endDate As Date = DateInput("请输入合同结束日期(格式:yyyy-MM-dd)")
     ```

3. **弹窗提示结果**:
   - 如果不需要表格,可以直接弹窗显示:
     ```vbnet
     Dim result As String = ""
     For Each kvp In yearMonths
         result &= kvp.Key & "年:" & kvp.Value & "个月" & vbCrLf
     Next
     MessageBox.Show(result, "合同年度月数统计")
     ```

---

### 适用场景
此方法适用于需要快速统计合同、租赁、服务期等时间段内每年包含的月数场景,尤其适合 Foxtable 用户进行轻量级数据管理。






 回到顶部
帅哥哟,离线,有人找我吗?
myredsun
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:158 积分:1673 威望:0 精华:0 注册:2014/2/17 16:11:00
  发帖心情 Post By:2025/2/28 16:26:00 [只看该作者]

太强大了,deepseek,刚想起它,用一下,真的出结果。图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112465 积分:572605 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/2/28 16:39:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
y2287958
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4850 积分:35150 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2025/2/28 16:48:00 [只看该作者]

尽信deepseek,有时会误入歧途图片点击可在新窗口打开查看

 回到顶部