当前位置:
文档之家› 1C#实现工作日的计算(排班系统常用)
1C#实现工作日的计算(排班系统常用)
string sql = "insert into ConfigDate(RestDate,State,Remark) values('" + dtTemp + "','1','星期六')";
FLX.ORM.BrokerFactory.GetBroker("Yyjcpt").DataAccess.ExecuteNonQuer y(sql);
{ string sql = "insert into ConfigDate(RestDate,State,Remark) values('" +
dtTemp + "','1','星期日')"; FLX.ORM.BrokerFactory.GetBroker("Yyjcpt").DataAccess.ExecuteNonQuer
{ break;
} if (TempDate.Date != Convert.ToDateTime(dt.Rows[j]["RestDate"].ToString()).Date && j == dt.Rows.Count - 1) {
workdays++; } } } else { workdays++; } } return workdays; } #endregion
四、表 ConfigDate 的结构 Code
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[ConfigDate](
[GUID] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_ConfigDate_GUID] DEFAULT (newid()),
[RestDate] [datetime] NULL,
[State] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, [Remark] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT [PK_ConfigDate_1] PRIMARY KEY CLUSTERED ( [GUID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 表示有效的休息日 期,2 表示无效的休息日期' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'ConfigDate', @level2type=N'COLUMN', @level2name=N'State' 五、效果展示
y(sql); }
} if (dtTemp.DayOfWeek == System.DayOfWeek.Saturday) {
string sqlquery = "select * from ConfigDate where RestDate='" + dtTemp + "'";
DataTable dt = new DataTable(); dt = FLX.ORM.BrokerFactory.GetBroker("Yyjcpt").DataAccess.ExecuteDataTable(sqlquery); if (dt.Rows.Count == 0) {
string sqlquery = "select * from ConfigDate where RestDate='" + dtTemp + "'";
DataTable dt = new DataTable(); dt = FLX.ORM.BrokerFactory.GetBroker("Yyjcpt").DataAccess.ExecuteDataTable(sqlquery); if (dt.Rows.Count == 0)
namespace FLX.Portal.Web {
/// <summary> /// 计算开始日期到结束日期内的工作日 /// 2008-09-19 /// </summary> public class CalculateWorkDay {
#region 构造函数 public CalculateWorkDay() {
// // TODO: 在此处添加构造函数逻辑 // } #endregion #region 计算工作日天数 public static int CalculateWorkDays(DateTime BeginDate, DateTime EndDate) { string sql = "select * from ConfigDate where state='1'"; DataTable dt = new DataTable();//dt 为所有有效的休息节假日数据源 dt = FLX.ORM.BrokerFactory.GetBroker("Yyjcpt").DataAccess.ExecuteDataTable(sqage = "<script language=javascript>alert('" + this.DDLYear.SelectedItem.Text + "周末假日初始化成功!')</script>"; Page.RegisterStartupScript("jump", strmessage); } } }
public partial class InitHoliday : PortalPage {
protected void Page_Load(object sender, EventArgs e) {
if (!this.IsPostBack) {
string date = DateTime.Now.Date.Year.ToString(); this.DDLYear.SelectedValue = date; } } protected void BtnInit_Click(object sender, EventArgs e) { DateTime begindate = Convert.ToDateTime(this.DDLYear.SelectedValue + "-01-01"); DateTime enddate = Convert.ToDateTime(this.DDLYear.SelectedValue + "-12-31"); System.TimeSpan tsDiffer = enddate.Date - begindate.Date; int intDiffer = tsDiffer.Days + 1; for (int i = 0; i < intDiffer; i++) { DateTime dtTemp = begindate.Date.AddDays(i); if (dtTemp.DayOfWeek == System.DayOfWeek.Sunday) {
int workdays = 0;//返回值,即 EndDate 和 BeginDate 之间的工作日数 System.TimeSpan tsDiffer = EndDate.Date - BeginDate.Date;//计算 EndDate 和 BeginDate 之间相差多少天 int intDiffer = tsDiffer.Days + 1;//相差天数的 int 值 for (int i = 0; i < intDiffer; i++)//从 BeginDate 开始一天天加,判断临时的日期值是 不是节假日,如果不是节假日,则该天为工作日,workdays 加 1 {
DateTime TempDate = BeginDate.Date.AddDays(i); if (dt.Rows.Count > 0) {
for (int j = 0; j < dt.Rows.Count; j++) {
if (TempDate.Date == Convert.ToDateTime(dt.Rows[j]["RestDate"].ToString()).Date)
一、计算逻辑: 1.初始化某一年中的所有周六和周日,比如初始化 2008 年的所有周六、周日,存入表
ConfigDate 中; 2.添加周六、周日外的其它节假日,比如国庆节、五一节、元旦等至表 ConfigDate 中; 3.查询某年某月中的所有节假日,并能对某一节假日进行设置其有效性,比如我某个周六加
班,则设置该周六假日无效,实际上该天当计算的时候也是工作日; 4.当输入开始日期和结束日期后,把开始日期至结束日期的每一天与 ConfigDate 表中所有有
效节假日进行对比,如果没有找到则工作日总数加 1;