workdays.c

C语言打印工作日示例

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <stdio.h>

void main(void)
 {
   char *workdays[] = {"Monday", "Tuesday", "Wednesday",
                        "Thursday", "Friday", "" };
   char **work_day;

   work_day = workdays;

   while (*work_day)
     printf("%s/n", *work_day++);
 }

 

// 2025-11-05 冯 // 参照下来子表数据 子表数据根据关联任务找到对应的节点时间 层层赋值 let { value } = arguments[0]; let data = value; console.log(‘原始数据:’, data); const now = new Date(); let today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); const formattedDate = ${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, '0')}-${now.getDate().toString().padStart(2, '0')}; const idMap = {}; const calculateWorkDays = (start, days) => { if (days <= 0) return start.toISOString().split(‘T’)[0]; const result = new Date(start); let added = 0; let safetyCounter = 0; const MAX_ITERATIONS = 365 * 5; while (added < days && safetyCounter < MAX_ITERATIONS) { result.setDate(result.getDate() + 1); const day = result.getDay(); if (day !== 0 && day !== 6) added++; safetyCounter++; } if (safetyCounter >= MAX_ITERATIONS) { console.error(安全阀触发:计算日期超过最大迭代次数 (${days}天)); return formattedDate; // 返回当前日期作为安全值 } return result.toISOString().split(‘T’)[0]; }; // 1:处理关联任务依赖关系 data.forEach(item => { if (item.input_gantt_pid !== “0”) { if (item.input_ai1ocsab == null && (!item.date_ojtjcbwl || !item.date_u0vgd44a)) { // 无关联任务的处理 item.date_ojtjcbwl = formattedDate; const addDays = parseInt(item.Count_1onrwvsa) || 1; item.date_u0vgd44a = calculateWorkDays(new Date(item.date_ojtjcbwl), addDays); } else if (item.input_ai1ocsab) { // 有关联任务的处理 const refItem = data.find(it => it.input_wnjhp5ur === item.input_ai1ocsab); if (refItem?.date_u0vgd44a) { item.date_ojtjcbwl = refItem.date_u0vgd44a; const addDays = parseInt(item.Count_1onrwvsa) || 1; item.date_u0vgd44a = calculateWorkDays(new Date(refItem.date_u0vgd44a), addDays); } } } // 填充父任务名称 idMap[item.input_gantt_id] = item; if (item.input_gantt_pid === “0”) { item.input_mnm39sq6 = ‘’; } else if (idMap[item.input_gantt_pid] && !item.input_mnm39sq6) { item.input_mnm39sq6 = idMap[item.input_gantt_pid].input_wnjhp5ur; } }); // 2:父节点链式时间处理 const parentNodes = data .filter(item => item.input_gantt_pid === “0”) .sort((a, b) => parseInt(a.line_number) - parseInt(b.line_number)); // 按行号排序 const childrenMap = data.reduce((map, item) => { if (item.input_gantt_pid !== “0”) { map[item.input_gantt_pid] = map[item.input_gantt_pid] || []; map[item.input_gantt_pid].push(item); } return map; }, {}); let prevParentEndDate = null; parentNodes.forEach(parent => { const children = childrenMap[parent.input_gantt_id] || []; // 1. 处理时间继承 if (prevParentEndDate !== null) { // 当前父节点继承上一个父节点的结束时间 parent.date_ojtjcbwl = prevParentEndDate; // 所有子项继承父节点的开始时间 children.forEach(child => { if (!child.input_ai1ocsab) { // 仅处理无前置任务的子项 child.date_ojtjcbwl = prevParentEndDate; // 重新计算子项结束时间 if (child.Count_1onrwvsa) { const addDays = parseInt(child.Count_1onrwvsa) || 1; child.date_u0vgd44a = calculateWorkDays(new Date(prevParentEndDate), addDays); } } }); } // 2. 重新计算父节点时间范围(基于子项) let minStart = Infinity; let maxEnd = -Infinity; children.forEach(child => { if (child.date_ojtjcbwl) { const timestamp = new Date(child.date_ojtjcbwl).getTime(); if (timestamp < minStart) minStart = timestamp; } if (child.date_u0vgd44a) { const timestamp = new Date(child.date_u0vgd44a).getTime(); if (timestamp > maxEnd) maxEnd = timestamp; } }); // 3. 设置父节点时间范围 if (minStart !== Infinity && maxEnd !== -Infinity) { const formatDate = timestamp => { const date = new Date(timestamp); return ${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}; }; parent.date_ojtjcbwl = formatDate(minStart); parent.date_u0vgd44a = formatDate(maxEnd); } // 4. 更新供下一个父节点使用的结束日期 prevParentEndDate = parent.date_u0vgd44a; }); // 3:重新计算相关数字字段 data.forEach(item => { // 计算剩余天数 if (item.date_u0vgd44a) { const targetDate = new Date(item.date_u0vgd44a); const target = new Date(targetDate.getFullYear(), targetDate.getMonth(), targetDate.getDate()); let daysDiff = 0; let currentDate = new Date(today); if (target >= today) { while (currentDate < target) { currentDate.setDate(currentDate.getDate() + 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) daysDiff++; } } else { while (currentDate > target) { currentDate.setDate(currentDate.getDate() - 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) daysDiff--; } } item.Count_e9oxvnxs = daysDiff; } // 计算已用天数 if (item.date_5g33gfbq) { const actualDate = new Date(item.date_5g33gfbq); const actual = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()); const planDate = new Date(item.date_ojtjcbwl); const plan = new Date(planDate.getFullYear(), planDate.getMonth(), planDate.getDate()); let delayDays = 0; let currentDate = new Date(plan); if (actual >= plan) { while (currentDate < actual) { currentDate.setDate(currentDate.getDate() + 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) delayDays++; } } else { while (currentDate > actual) { currentDate.setDate(currentDate.getDate() - 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) delayDays--; } } item.Count_rss3um2e = delayDays; } else { const planDate = new Date(item.date_ojtjcbwl); const plan = new Date(planDate.getFullYear(), planDate.getMonth(), planDate.getDate()); let delayDays = 0; let currentDate = new Date(plan); if (today >= plan) { while (currentDate < today) { currentDate.setDate(currentDate.getDate() + 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) delayDays++; } } else { while (currentDate > today) { currentDate.setDate(currentDate.getDate() - 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) delayDays--; } } item.Count_rss3um2e = delayDays; } // 计算计划天数 if (item.date_u0vgd44a && item.date_ojtjcbwl) { const endDate = new Date(item.date_u0vgd44a); const end = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()); const startDate = new Date(item.date_ojtjcbwl); const start = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()); let workDays = 0; let currentDate = new Date(start); while (currentDate < end) { currentDate.setDate(currentDate.getDate() + 1); const day = currentDate.getDay(); if (day !== 0 && day !== 6) workDays++; } item.Count_1onrwvsa = workDays; } }); console.log(‘处理后的数据:’, data); this.setData({ table_a2tpdoka: data }); 在这个逻辑上面 我需要保存现有的逻辑 然后我子项的时间更改 我整个数据的时间都跟着更改 记得 保存现有逻辑 在这个逻辑上新增 不要函数 纯js 我说了我不要函数 听不懂话吗?
最新发布
11-26
``` # 读取组信息(新增代码) df_group = pd.read_csv('项目-组.csv') df_group = df_group.drop_duplicates(subset='PMNameMsg', keep='first') # 合并数据(新增代码) merged_data = pd.merge( merged_data, df_group[['PMNameMsg', '组名', '组长']], on='PMNameMsg', how='left' ) # 处理工期列中的"协商"文本(替换为0) merged_data['工期'] = pd.to_numeric(merged_data['工期'].replace('协商', -999), errors='coerce').fillna(-999) # # 处理空值 # merged_data['GongQiHuanBan'] = merged_data['GongQiHuanBan'].fillna(0) # 新增日期列转换 merged_data['HuanBanDate'] = pd.to_datetime(merged_data['HuanBanDate'], errors='coerce') merged_data['HuanBanReDate'] = pd.to_datetime(merged_data['HuanBanReDate'], errors='coerce') # 日期格式转换 merged_data['SADate'] = pd.to_datetime(merged_data['SADate']) merged_data['UpdateTime'] = pd.to_datetime(merged_data['UpdateTime']) holidays = [ # 元旦(不调休) '2025-01-01', # 周三 # 春节(调休2天) '2025-01-28', '2025-01-29', '2025-01-30', '2025-01-31', '2025-02-01', '2025-02-02', '2025-02-03', '2025-02-04', # 1.28(除夕)-2.4 # 清明节(不调休) '2025-04-04', '2025-04-05', '2025-04-06', # 周五-周日 # 劳动节(调休1天) '2025-05-01', '2025-05-02', '2025-05-03', '2025-05-04', '2025-05-05', # 周四-周一 # 端午节(不调休) '2025-05-31', '2025-06-01', '2025-06-02', # 周六-周一 # 中秋节+国庆节(调休2天) '2025-10-01', '2025-10-02', '2025-10-03', '2025-10-04', '2025-10-05', '2025-10-06', '2025-10-07', '2025-10-08' # 周三-下周三 ] holiday_dates = pd.to_datetime(holidays) # 新增调休工作日列表(转换为日期格式) workdays_adjustment = [ '2025-01-26', # 周日补春节 '2025-02-08', # 周六补春节 '2025-04-27', # 周日补劳动节 '2025-09-28', # 周日补国庆 '2025-10-11' # 周六补国庆 ] adjustment_dates = pd.to_datetime(workdays_adjustment) # 转换日期格式 def calculate_workdays(start_date, end_date): # 处理未结案情况 end_date = end_date if pd.notnull(end_date) else pd.Timestamp.now() # 生成日期序列 date_range = pd.date_range(start=start_date.normalize(), end=end_date.normalize(), freq='D') # 修改过滤条件(增加调休判断) workdays = [date for date in date_range if ( (date.weekday() < 5) or # 常规工作日 (date in adjustment_dates) # 调休补班日 ) and (date not in holiday_dates) # 排除法定假日 ] return len(workdays) def compute_huanban_days(row): start = row['HuanBanDate'] if pd.isnull(start): return 0 end = row['HuanBanReDate'] if pd.notnull(row['HuanBanReDate']) else pd.Timestamp.now() if start > end: return 0 return calculate_workdays(start, end) merged_data['GongQiHuanBan'] = merged_data.apply(compute_huanban_days, axis=1) # 计算总工期 merged_data['总工期'] = merged_data['工期'] + merged_data['GongQiHuanBan'] # 计算实际工作日 merged_data['实际工作日'] = merged_data.apply( lambda x: calculate_workdays(x['SADate'], x['UpdateTime']), axis=1 ) # 判断超时 merged_data['是否超时'] = '否' merged_data['超时天数'] = 0 mask = merged_data['实际工作日'] > merged_data['总工期'] merged_data.loc[mask, '是否超时'] = '是' merged_data.loc[mask, '超时天数'] = merged_data['实际工作日'] - merged_data['总工期']```StatusName为案件状态,当状态=办结或者=发件时,案件为已完成;等于其他情况,案件为正在办件。组名用来分组。是否超时列,存储了是和否。以程序查询时间开始,往前获取5个工作日,统计SADate在这个时间范围内的案件个数,为本周案件总数以组统计;并根据案件状态,分别统计本周已完成和正在处理的案件数量;根据是否超时,为是的,分组本周统计各组超时案件数量
03-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值