找一个日期作为基准参考点,通过公式计算给定的日期距离这个日期的天数,然后天数减1,最后通过天数求日期。
给出以下代码:C/C++(以1900年1月1日为起点):
1. 求天数
int GetBaseDays(int uYear,unsigned int uMonth,unsigned int uDay)
{
if (LTDateCheck(uYear,uMonth,uDay)==false)
{
return -1;
}
//用来计算距离1900年1月1日的天数,传入年、月、日
int sum=0;
if(uYear>=1900)
{
int X=int(uYear/100);//世纪数
int Y=X-int(X/4);
if (uMonth<=2&&uMonth>0)
{
uYear--;
uMonth+=12;
}
sum=int(365.25*(uYear-1900))+int(30.6*(uMonth+1))+uDay-Y-49;
}
// m_iDayOfWeek=(sum+1)%7;//星期
return sum;//返回距离1900年1月1日的总天数(积日)
}
2. 求日期
bool etDateFromDays(unsigned int nDays,unsigned int *iYear,unsigned int *iMonth,unsigned int *iDay)
{
if (nDays<-51)
{
return false;
}
if (nDays<0)
{
int x=int((nDays)/7);
// m_iDayOfWeek=int(nDays-(x-1)*7+1)%7;//1900年1月1日周一
}else
{
// m_iDayOfWeek=int(nDays+1)%7;//1900年1月1日周一
}
int A=nDays,D;
D=int((A+547804.75)/36524.25);
A+=1+D-int(D/4);
A+=51;
*iYear=int(double(A-122.1)/365.25);
D=A-int(365.25**iYear);
*iMonth=int(D/30.6);
*iDay=int(D-int(*iMonth*30.6));
*iYear+=1900;
*iMonth--;
if (*iMonth>12)
{
*iMonth-=12;
}
if (*iMonth<=2)
{
*iYear++;
}
return true;
}
计算给定日期的前一天日期,用到的工具:notepad++,步骤如下:
示例代码如下:
echo date("Y-m-d",(strtotime("2009-01-01") - 3600*24));
?>
说明:2009-01-01是指定时间,然后减去一天也就是3600秒乘以24小时。
2.效果图图如下:
注意事项:此段代码只能在php环境执行。