万年历的生成(菜鸟分享),另求一高效率的生成方法,感觉这个效率不高!

编程有钱人了 2008-11-10 03:40:05
另求一高效率的生成方法,感觉这个效率不高!
进来用PHP做OA的时候在日程安排的模块上要用的万年历(类似google的,google做的真漂亮啊!)

上网一搜,不是JAVA的就是JS的(c#的反正我是没搜到,也许我笨!)
好不容易找到个PHP 下载下来 ,结果一句没看懂!(汗,谁叫咱太菜呢!)
于是想自己写个,用的2天的时间菜想出算法了(看来我还真笨,一般人10分钟搞定,牛人1分钟定,我用2天,
看来我.....,废话少少说)

先做个PHP版,后面是C#版的


function test1()
{
echo $this->createCalendar(2008,11);
}

function createCalendar($year,$month)
{
//创建日历
$st=strtotime($year."-".$month."-01");//获得日期进行格式化
$arr=getdate($st);//准换成数组
$week=$arr["wday"];//得到当月的第一天是星期几
$daysNum=date("t",$st); //得到当月的天数
for($day=1;$day<=$daysNum;$day++)
{
$x=($day+$week-1)%7;//根据星期的规律循环x轴坐标
$y=($day+$week-1)/7;//根据(月/星期)循环Y轴坐标
for($j=0;$j<6;$j++)
{
for($i=0;$i<7;$i++)
{
$a[$x][$y]=$day;//开始赋值
}
}
}
//输出日历
$strTable="<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">";
$strTable.="<thead>
<th>星期天</th>
<th>星期一</th>
<th>星期二</th>
<th>星期三</th>
<th>星期四</th>
<th>星期五</th>
<th>星期六</th>
</thead>";

for($i=0;$i<6;$i++)
{
$strTable.="<tr>";
for($j=0;$j<7;$j++)
{
$strTable.="<td>".$a[$j][$i]."</td>";
}
$strTable.="</tr>";
}
$strTable.="</table>";
//dump($a);
echo $week;
}


C#版本的

protected void Page_Load(object sender, EventArgs e)
{
createCalendar(2008,12);//输入参数进行测试
}
private void createCalendar(int year,int month)
{
int days = DateTime.DaysInMonth(year,month);//得到当月的天数
DateTime dt = new DateTime(year,month, 1);
int weeke =Convert.ToInt32(dt.DayOfWeek.ToString("d"));//得到当月的第一天是星期几
string[,] cal=new string[7,6];//创建一个二维数组来存放日期
for (int day= 1; day<= days;day++ )
{
int x = (day + weeke - 1) % 7;//根据星期的规律循环x轴坐标
int y = (day + weeke - 1) / 7;//根据(月/星期)循环Y轴坐标
for (int j = 0; j < 6;j++ )
{
for (int i = 0; i < 7;i++ )
{
cal[x, y] = day.ToString();//开始赋值
}
}
}
//输出
System.Text.StringBuilder st = new System.Text.StringBuilder();
st.Append("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">");
st.Append("<thead><th>星期天</th><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th></thead>");
for(int i=0;i<6;i++)
{
st.Append("<tr>");
for(int j=0;j<7;j++)
{
st.Append("<td>"+cal[j,i]+"</td>");
}
st.Append("</tr>");
}
st.Append("</table>");
Response.Write(st);
Response.End();
}



真正写出来了,菜知道很简单,哎,本人思维愚钝,而且非常慢!只能做成这样了!
高手们还有别的高效率的办法吗?
...全文
209 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
icokescow 2011-04-21
  • 打赏
  • 举报
回复
我什么都看不到。。。。
jiangnan_010203 2008-11-11
  • 打赏
  • 举报
回复
学习
Jack123 2008-11-11
  • 打赏
  • 举报
回复
~_~
新溪-gordon 2008-11-11
  • 打赏
  • 举报
回复
晕了,你写的没有年月,谁知道是哪年哪月的啊?
还有就是你只能看看这一天的,不能增加,减少来看别的月份。
zlb789 2008-11-11
  • 打赏
  • 举报
回复
学习下
lovehongyun 2008-11-11
  • 打赏
  • 举报
回复
up
jiang_jiajia10 2008-11-11
  • 打赏
  • 举报
回复
很强大了
kevinhu520 2008-11-11
  • 打赏
  • 举报
回复
up
hanqingyu 2008-11-11
  • 打赏
  • 举报
回复
帮顶
bsetsail 2008-11-11
  • 打赏
  • 举报
回复
up
gengwanshanreally 2008-11-10
  • 打赏
  • 举报
回复
关注,学习,up!
yyixin 2008-11-10
  • 打赏
  • 举报
回复
UP
满衣兄 2008-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tian_fang 的回复:]
太强了,恭喜!学习

[/Quote]
芳芳
caobob 2008-11-10
  • 打赏
  • 举报
回复
呵呵,我毕业时用C写过万年历。其实就是一个算法和几个循环。
冷月孤峰 2008-11-10
  • 打赏
  • 举报
回复
UP
  • 打赏
  • 举报
回复
up
tian_fang 2008-11-10
  • 打赏
  • 举报
回复
楼主加油!不要这么谦虚
sunshine_anycall 2008-11-10
  • 打赏
  • 举报
回复
c#不是有个日历控件吗?
是在不行js的页比php的好哇
wjxluck 2008-11-10
  • 打赏
  • 举报
回复
up
greatverve 2008-11-10
  • 打赏
  • 举报
回复
my97不提供万年历吗?
加载更多回复(3)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧