文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>日期的格式化显示

日期的格式化显示

时间:2010-10-15  来源:管宇

我们的日期以前显示为:2010年10月15日 2010年10月16日 2011年10月18日 2011年10月17日 

 

需要修改为: 2010年10月15日 - 17日;

 

规则是:如果连续中间 用-隔开,如果不连续用、隔开。

 

代码如下: 

 

public static string FormatDepartDate(string AllDepartDate)
        {
            //2010年10月15日
            
            string[] Array_AllDepartDate = AllDepartDate.Split(' ');            

            IEnumerable<String> querys = Array_AllDepartDate.OrderBy(a => Convert.ToDateTime(a));

            StringBuilder m_FormatDate = new StringBuilder(512);

            for (int iLoop = 0; iLoop < querys.Count(); iLoop++)
            {
                if (iLoop == 0)
                {
                    m_FormatDate.Append(querys.ElementAt(0).ToString());
                }
                else
                {
                    DateTime m_DateTime = Convert.ToDateTime(querys.ElementAt(iLoop - 1));
                    DateTime m_DateTime1 = Convert.ToDateTime(querys.ElementAt(iLoop));

                    //判断是否同一年
                    if (m_DateTime1.Year == m_DateTime.Year)
                    {
                        //是同一个月
                        if (m_DateTime1.Month == m_DateTime.Month)
                        {
                            //判断日期是否连续
                            IsEqualDay(m_FormatDate, ref m_DateTime, ref m_DateTime1);
                        }
                        else
                        {
                            m_FormatDate.AppendFormat("、{0}月{1}日", m_DateTime1.Month.ToString("00"), m_DateTime1.Day.ToString("00"));
                        }
                    }
                    else
                    {
                        m_FormatDate.AppendFormat("、{0}年{1}月{2}日", m_DateTime1.Year.ToString("0000"), m_DateTime1.Month.ToString("00"), m_DateTime1.Day.ToString("00"));
                    }
                }
            }

            return m_FormatDate.ToString();
        }

        private static void IsEquelDay(StringBuilder m_FormatDate, ref DateTime m_DateTime, ref DateTime m_DateTime1)
        {
            if (m_DateTime1.Day - m_DateTime.Day == 1)
            {
                if (m_FormatDate.ToString().LastIndexOf(string.Format("-{0}", m_DateTime.Day.ToString("00"))) > 0) //去掉连续的日期 用-代替。
                    m_FormatDate.Replace(string.Format("-{0}", m_DateTime.Day.ToString("00")), string.Format("-{0}", m_DateTime1.Day.ToString("00")));
                else
                    m_FormatDate.AppendFormat("-{0}日", m_DateTime1.Day.ToString("00"));
            }
            else
            {
                m_FormatDate.AppendFormat("、{0}日", m_DateTime1.Day.ToString("00"));
            }
        }

 

 

调用如下:

 

string a = "2010年10月15日 2010年10月16日 2011年10月15日 2011年10月17日";
                        
Response.Write(FormatDepartDate(a));

 

 

这个方法我不是很满意,也不知道怎么优化了,如果大家有好的方法,请分享出来。 谢谢了!

 缺点: 

1.判断日期连续的地方逻辑复杂。 

2.循环的日期转换,比较耗费性能。

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载