關於部落格
請前往新站:ian.twgg.org
  • 14108

    累積人氣

  • 1

    今日人氣

    0

    追蹤人氣

兩日期相差天數計算




一、公式介紹:

對於一日期計算出一相對應的一整數N,再計算出兩整數相差即為相差天數。
方法如下:

    N=1461 * f(年, 月)
÷ 4 + 153 * g(月) ÷ 5 +日
    其中:
                   f(年, 月) = 年-1           
如果月<=2
                                 =年                其他情況

                    g(月)      =月+13         如果月<=2

                                  =月+1            其他情況

(對於1900/3/1以後上式都成立)




ex :  2004/2/1~2005/9/20
∵N1=1461 * 2003  ÷ 4 +153 * 15 ÷ 5 + 1
         =731595 + 459 + 1
         =732055

    N2=1461 * 2005 ÷ 4 +153 * 10 ÷ 5 +20
         = 732326 + 306 +20
         =732652


∴ N2 - N1 =  597 = 相差天數


二、以C語言表示

#include <stdio.h>

#include <stdlib.h>

struct getTimes
{
   int year;
   int month;
   int day;
};

int g(struct getTimes times)
{
    if(times.month<=2)
       times.month+=13;
    else
       times.month+=1;
   
    return times.month;
}

int f(struct getTimes times)
{
    if(times.month<=2)
       times.year-=1;
   
    return times.year;
}
//取相距天數的正值
int plus(int a,int b)
{
    int disDay;
   
    if(a>b)
       disDay = a-b;
    else
       disDay = b-a;
   
    return disDay ;
   
}

int setN(struct getTimes times)
{
    return 1461 * f(times) / 4 + 153 * g(times) / 5 + times.day;
}

int main()
{
    struct getTimes now,after;
    int a,b,disDay;
   
    printf("請輸入第一個日期(yyyy/mm/dd):n");
    scanf("%d/%d/%d",&now.year , &now.month , &now.day);
    printf("請輸入第二個日期(yyyy/mm/dd):n");
    scanf("%d/%d/%d",&after.year , &after.month , &after.day);
   
    a = setN(now);
    b = setN(after);
   
    disDay = plus(a,b);
   
    printf("--------------n相差%u天nn",disDay);
    system("PAUSE");
   
    return 0;
}


三、執行檔(
Executable File)下載:

相簿設定
標籤設定
相簿狀態