如何计算给定日期前一天的日期

2024-10-30 18:21:59
推荐回答(2个)
回答1:

找一个日期作为基准参考点,通过公式计算给定的日期距离这个日期的天数,然后天数减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;
}

回答2:

计算给定日期的前一天日期,用到的工具:notepad++,步骤如下:

  1. 示例代码如下:

echo date("Y-m-d",(strtotime("2009-01-01") - 3600*24));
?>

说明:2009-01-01是指定时间,然后减去一天也就是3600秒乘以24小时。

2.效果图图如下:

注意事项:此段代码只能在php环境执行。