Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > C# DateDiff ฟังก์ชั่นคำนวนอายุ C# ,Extension method ,MS SQL และ MySQL



 

C# DateDiff ฟังก์ชั่นคำนวนอายุ C# ,Extension method ,MS SQL และ MySQL

 



Topic : 049498



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์




เป็นฟังก์ชั่นคำนวนอายุแบบละเอียดโดยจะผลลัพธ์เป็น ปี และ เศษเดือนเศษวัน(ถ้ามี)
เช่น 2 ปี 3 เดือน 2 วัน

โดยนำต้นแบบมาจาก codeproject และนำมาดัดแปลงเพื่อความกระชับ
หลังจากได้ดัดแปลง code ได้เขียนออกมา อีก 3 version ( ตัวต้นแบบเป็น C# ทำงานได้กับ .Net ทุก framework)
คือ C# แบบ extension method สำหรับ .Net framework 4.0 ขึ้นไป
MS SQL Scalar function และ MySQL Function

หลักการ หากหน่วยเล็กที่สุดตัวลบมีค่ามากกว่าตัวตั้งจะมีการทด เกิดขึ้นโดยจะยืมมาจากหน่วยนับในลำดับถัดไป
และผลการคำนวนถูกต้องแม้จะเป็นปีอธิกสุรทิน (เดือน กุมภาพันธ์ มี 29 วัน)

ความถูกต้อง ทดสอบโดยการเพิ่ม interval และคำนวนอายุเทียบกันเช่น
เพิ่ม interval เข้าไป 4 เดือน 15 วัน แล้วนำผลลัพธ์มาคำนวนอายุ ว่าเท่ากับ 4 เดือน 15 วัน หรือไม่
(ทดสอบได้เลยค่ะ)

หมายเหตุ
- ในอนาคตจะเพิ่มอีก version คือ Javascript สำหรับการทำงานร่วมกันกับ AJAX หรือ PHP หรือ JAVA
- สำหรับ vb.net ก้อเอา code ไปแปลงเอา นะคะ >>http:// http://converter.telerik.com/
- version store proc มี function เพิ่มเติมต้องสร้างให้ครบจึงจะใช้งานได้
- ทุก version ทำงานกับปีฝรั่งค่ะ >> AD >> ANO DOMINI

ตัวอย่างการใช้งาน

prototype version (c#) :
DateTime myDate = new DateTime(2532 - 543, 4, 7);
DateTime ToDate = DateTime.Now;

DateDifference dDiff = new DateDifference(myDate, ToDate);
SomeLabel.Text = dDiff .ToString() ;


extension method version :
DateTime myDate = new DateTime(2532 - 543, 4, 7);
DateTime ToDate = DateTime.Now;

SomeLabel.Text = myDate.CalcAge(ToDate).ToString()


MS SQL STOREPROC:

SELECT dbo.CALC_AGE([Date_Field] ,GETDATE() ,0) As [PreciseAge]
FROM [TableName]
WHERE ....



MY SQL STOREPROC:

SELECT CALC_AGE(`Date_Field` ,CURDATE() ,0) As `PreciseAge`
FROM `TableName`
WHERE ....

เพื่อความสะดวกจะ post 1 reply per version ค่ะ
ถ้าพบข้อผิดพลาดประการใด กรุณาแจ้งมาทาง PM ขอบพระคุณมากค่ะ



Tag : .NET, MySQL, Ms SQL Server 2008, C#, VS 2003 (.NET 1.1), VS 2010 (.NET 4.x)









ประวัติการแก้ไข
2010-09-29 05:59:44
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-09-29 05:41:25 By : blurEyes View : 17796 Reply : 12
 

 

No. 1



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


protype version :

Code (C#)
public class DateDifference
{
    private DateTime _FromDate;
    private DateTime _ToDate;
    private int _Year = 0;
    private int _Month = 0;
    private int _Day = 0;

    public int Year
    {
        get { return _Year; }
        set { _Year = value; }
    }
    public int Month
    {
        get { return _Month; }
        set { _Month = value; }
    }
    public int Day
    {
        get { return _Day; }
        set { _Day = value; }
    }
    public DateTime FromDate
    {
        get { return _FromDate; }
        set { _FromDate = value; }
    }
    public DateTime ToDate
    {
        get { return _ToDate; }
        set { _ToDate = value; }
    }

    /// <summary>
    /// defining Number of days in month; index 0=> january and 11=> December
    /// february contain either 28 or 29 days, that's why here value is -1
    /// which wil be calculate later.
    /// </summary>
    private int[] monthDay = new int[12] { 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    public DateDifference(DateTime argFromDate)
    {
        _ToDate = DateTime.Now;
        _FromDate = argFromDate;
        CalcDifferenceDate();
    }

    public DateDifference(DateTime argFromDate, DateTime argToDate)
    {
        _ToDate = argToDate;
        _FromDate = argFromDate;
        CalcDifferenceDate();
    }

    private void SwapDate(ref DateTime LeftDate, ref DateTime RightDate)
    {
        DateTime tempDate;
        if (LeftDate > RightDate)
        {
            tempDate = LeftDate;
            LeftDate = RightDate;
            RightDate = tempDate;
        }
        else
        {
            LeftDate = LeftDate;
            RightDate = RightDate;
        }
    }

    private void CalcDifferenceDate()
    {

        SwapDate(ref _FromDate, ref _ToDate);
        int carryFlag = 0;

        // ***************************
        // Day calculation 
        if (this.FromDate.Day > this.ToDate.Day)
            carryFlag = this.monthDay[this.FromDate.Month - 1];

        // febuary detect
        if (carryFlag == -1)
        {
            if (CheckedLeapYear(this.FromDate))
                // leap year february contain 29 days
                carryFlag = 29;
            else
                carryFlag = 28;
        }

        if (carryFlag != 0)
        {
            this.Day = (this.ToDate.Day + carryFlag) - this.FromDate.Day;
            carryFlag = 1;
        }
        else
            this.Day = this.ToDate.Day - this.FromDate.Day;

        // ***************************
        // Month calculation 

        if ((this.FromDate.Month + carryFlag) > this.ToDate.Month)
        {
            this.Month = (this.ToDate.Month + 12) - (this.FromDate.Month + carryFlag);
            carryFlag = 1;
        }
        else
        {
            this.Month = this.ToDate.Month - (this.FromDate.Month + carryFlag);
            carryFlag = 0;
        }

        this.Year = this.ToDate.Year - (this.FromDate.Year + carryFlag);
    }

    private bool CheckedLeapYear(DateTime checkedDate)
    {
        int myYear = checkedDate.Year;
        return (((myYear % 4) == 0) && ((myYear % 100) != 0) || ((myYear % 400) == 0));
    }

    public string ToString(string argYearUnit, string argMonthUnit, string argDayUnit)
    {
        string retStr = string.Empty;
        if (this.Year > 0)
            retStr = retStr + string.Format("{0} {1} ", this.Year.ToString("#,##0"), argYearUnit);
        if (this.Month > 0)
            retStr = retStr + string.Format("{0} {1} ", this.Month.ToString("#,##0"), argMonthUnit);
        if (this.Day > 0)
            retStr = retStr + string.Format("{0} {1} ", this.Day.ToString("#,##0"), argDayUnit);
        return retStr.Trim();
    }

    public override string ToString()
    {
        return this.ToString("Year(s)", "Month(s)", "Day(s)");
    }
}







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 05:42:32 By : blurEyes
 


 

No. 2



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


Extension method version :

Code (C#)
namespace GeneralExtension
{

    public static class MyExtension
    {

        public static AgeSpan CalcAge(this DateTime Am, DateTime argToDate)
        {
            DateTime FromDate = Am;
            DateTime ToDate = argToDate;
            DateTime tempDate = DateTime.Now;

            AgeSpan retAge = new AgeSpan();

            int CarryFlag = 0;

            if (Am > argToDate)
            {
                ToDate = Am;
                FromDate = argToDate;
            }
            else
            {
                ToDate = argToDate;
                FromDate = Am;
            }

            // Day calc
            if (FromDate.Day > ToDate.Day)
            {
                // Get last day of month from previous month
                // even if leapyear system will automate return correctly
                tempDate = new DateTime(FromDate.Year, FromDate.Month, 1);
                tempDate = (tempDate.AddMonths(1)).AddDays(-1);

                CarryFlag = tempDate.Day;
                retAge.Day = (ToDate.Day + CarryFlag) - FromDate.Day;
                CarryFlag = 1;
            }
            else
                retAge.Day = ToDate.Day - FromDate.Day;

            //month calc
            if ((FromDate.Month + CarryFlag) > ToDate.Month)
            {
                retAge.Month = (ToDate.Month + 12) - (FromDate.Month + CarryFlag);
                CarryFlag = 1;
            }
            else
            {
                retAge.Month = ToDate.Month - (FromDate.Month + CarryFlag);
                CarryFlag = 0;
            }

            retAge.Year = ToDate.Year - (FromDate.Year + CarryFlag);

            return retAge;

        }

        public static AgeSpan CalcAge(this DateTime Am)
        {
            return Am.CalcAge(DateTime.Now);
        }
    }
    public class AgeSpan
    {
        public int Year { get; set; }
        public int Month { get; set; }
        public int Day { get; set; }

        public AgeSpan() { this.Year = 0; this.Month = 0; this.Day = 0; }

        public override string ToString()
        {
            return this.ToString("Year(s)", "Month(s)", "Day(s)", " ,");
        }

        public string ToString(string argYearCaption, string argMonthCaption, string argDayCaption, string argSeparator)
        {
            string strRet = string.Empty;

            if (Year > 0)
                strRet = string.Format("{0} {1}", this.Year, argYearCaption, argSeparator);
            if (Month > 0)
            {
                if(strRet.Length > 0 ) strRet = strRet + argSeparator ;
                strRet = strRet + string.Format("{0} {1}", this.Month, argMonthCaption, argSeparator);
            }
            if (Day > 0)
            {
                if (strRet.Length > 0) strRet = strRet + argSeparator;
                strRet = strRet + string.Format("{0} {1}", this.Day, argDayCaption);
            }
            return strRet;
        }
    }
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 05:46:46 By : blurEyes
 

 

No. 3



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


MS SQL Scalar function version :

Code (C#)
/****** Object:  UserDefinedFunction [dbo].[RPAD]    Script Date: 09/29/2010 05:54:19 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		PROUD
-- Create date: <Create Date, ,>
-- Description:	<Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[RPAD] (@VAR_STR NVARCHAR(MAX) ,@VAR_LENGTH INT ,@VAR_FILL_CHAR NVARCHAR(MAX))
	RETURNS NVARCHAR(MAX)

AS
BEGIN

	DECLARE
		@TEMP			INT , 
		@COUNTER		INT ,
		@RETSTR			NVARCHAR(MAX) ;
		
	SET @TEMP = @VAR_LENGTH - LEN(@VAR_STR);
	SET @RETSTR = @VAR_STR ;
	IF (@TEMP>0)
	BEGIN
		SET @COUNTER = 0;
		WHILE (@COUNTER < @TEMP)
		BEGIN
			SET @RETSTR = @RETSTR + @VAR_FILL_CHAR ;
			SET @COUNTER = @COUNTER +1 ;
		END
	END	
					
	RETURN @RETSTR 

END

GO

/****** Object:  UserDefinedFunction [dbo].[LPAD]    Script Date: 09/29/2010 05:55:06 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		PROUD
-- Create date: <Create Date, ,>
-- Description:	<Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[LPAD] (@VAR_STR NVARCHAR(MAX) ,@VAR_LENGTH INT ,@VAR_FILL_CHAR NVARCHAR(MAX))
	RETURNS NVARCHAR(MAX)

AS
BEGIN

	DECLARE
		@TEMP			INT , 
		@COUNTER		INT ,
		@RETSTR			NVARCHAR(MAX) ;
		
	SET @TEMP = @VAR_LENGTH - LEN(@VAR_STR);
	SET @RETSTR = @VAR_STR ;
	IF (@TEMP>0)
	BEGIN
		SET @COUNTER = 0;
		WHILE (@COUNTER < @TEMP)
		BEGIN
			SET @RETSTR = @VAR_FILL_CHAR + @RETSTR ;
			SET @COUNTER = @COUNTER +1 ;
		END
	END	
					
	RETURN @RETSTR 

END

GO

/****** Object:  UserDefinedFunction [dbo].[DATE_SERIAL]    Script Date: 09/29/2010 05:55:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- ======================================================
-- Author:        <PROUD ,PRANAKHON RAJABHUTNUNIVERSITY>
-- Create date:   <12 DEC 2009>
-- Description:   <CREATE DATETIME WITH EXACTLY FORMAT>
-- ======================================================
CREATE FUNCTION [dbo].[DATE_SERIAL](@VAR_YEARPART INT ,@VAR_MONTHPART INT ,@VAR_DAYPART INT)
RETURNS DATETIME
AS
BEGIN	
	DECLARE 
		
		@TEMP_STR			VARCHAR(20) ,
		@RET_DATE			DATETIME;
		
		-- BEGIN CALCULATION 
		
		SET @TEMP_STR = CONVERT(VARCHAR ,@VAR_DAYPART) + '-'
			+ CONVERT(VARCHAR ,@VAR_MONTHPART) + '-'
			+ CONVERT(VARCHAR ,@VAR_YEARPART) ;
		SET @RET_DATE = CONVERT(DATETIME ,@TEMP_STR ,105) ;	
	
	RETURN @RET_DATE  ;

END

/****** Object:  UserDefinedFunction [dbo].[CALC_AGE]    Script Date: 09/29/2010 05:56:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ======================================================
-- Author:        <PROUD ,PRANAKHON RAJABHUTNUNIVERSITY>
-- Create date:   <25 SEPT2010>
-- Description:   <CALC PRECISE AGE>
-- ======================================================
CREATE FUNCTION [dbo].[CALC_AGE] 
(
	-- Add the parameters for the function here
	@VAR_FROM_DATE DATETIME ,@VAR_TO_DATE DATETIME ,@OUTPUT_PATTERN INT
)
RETURNS VARCHAR(100)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @TEMP				INT ;
	DECLARE @FROM_DATE			DATETIME ;
	DECLARE @TO_DATE			DATETIME ;
	DECLARE @TEMP_DATE			DATETIME ;
	DECLARE @CARRY_FLAG			INT ;
	DECLARE @MY_YEAR			INT ;
	DECLARE @MY_MONTH			INT ;
	DECLARE @MY_DAY				INT ;
	DECLARE @RET_STR			VARCHAR(100) ;
	
	SET @CARRY_FLAG = 0 ;
	
	-- REORDER
	IF (DATEDIFF(DAY ,@VAR_FROM_DATE ,@VAR_TO_DATE) >= 0 )
	BEGIN
		SET @FROM_DATE = @VAR_FROM_DATE;
		SET @TO_DATE = @VAR_TO_DATE ;
	END 
	ELSE
	BEGIN
		SET @FROM_DATE = @VAR_TO_DATE;
		SET @TO_DATE = @VAR_FROM_DATE ;
	END ;
	
	-- DAY CALCULATION
	IF (DAY(@FROM_DATE) > DAY(@TO_DATE))
	BEGIN
		SET @TEMP_DATE = dbo.DATE_SERIAL(YEAR(@FROM_DATE) ,MONTH(@FROM_DATE) ,1) ;
		SET @TEMP_DATE = DATEADD(MONTH ,1 ,@TEMP_DATE) ;
		SET @TEMP_DATE = DATEADD(DAY ,-1 ,@TEMP_DATE) ;
		SET @CARRY_FLAG = DAY(@TEMP_DATE) ;
		SET @MY_DAY = (DAY(@TO_DATE) + @CARRY_FLAG) - DAY(@FROM_DATE) ;
		SET @CARRY_FLAG = 1 ;
	END
	ELSE	
		SET @MY_DAY = DAY(@TO_DATE) - DAY(@FROM_DATE) ;	
	
	-- MONTH
	IF ((MONTH(@FROM_DATE) + @CARRY_FLAG) > MONTH(@TO_DATE) )
	BEGIN
		SET @MY_MONTH = (MONTH(@TO_DATE) + 12) - (MONTH(@FROM_DATE) + @CARRY_FLAG) ;
		SET @CARRY_FLAG = 1 ;		
	END
	ELSE
	BEGIN
		SET @MY_MONTH = MONTH(@TO_DATE) - (MONTH(@FROM_DATE) + @CARRY_FLAG) ;
		SET @CARRY_FLAG = 0 ;
	END ;
	
	--YEAR
	SET @MY_YEAR = YEAR(@TO_DATE) - (YEAR(@FROM_DATE) + @CARRY_FLAG) ;
	
	IF (@OUTPUT_PATTERN = 99)
		SET @RET_STR = dbo.LPAD(@MY_YEAR ,4 ,'0') + '.' + dbo.LPAD(@MY_MONTH ,2 ,'0')  
			+ '.' + dbo.LPAD(@MY_DAY ,2 ,'0') ;
	ELSE
	BEGIN
		SET @RET_STR = '' ;
		IF (@MY_YEAR > 0 )
			SET @RET_STR = CONVERT(VARCHAR(100) ,@MY_YEAR ) + ' Year(s) ' ;
		IF (@MY_MONTH>0)
			SET @RET_STR = @RET_STR + CONVERT(VARCHAR(100) ,@MY_MONTH ) + ' Month(s) ' ;	
		IF (@MY_DAY>0)
			SET @RET_STR = @RET_STR + CONVERT(VARCHAR(100) ,@MY_DAY ) + ' Day(s) ' ;		
	END ;
	
	-- Return the result of the function
	RETURN @RET_STR

END





ประวัติการแก้ไข
2010-09-29 05:53:51
2010-09-29 12:50:01
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 05:50:37 By : blurEyes
 


 

No. 4



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


MYSQL Store proc :

Code (C#)
DELIMITER $$

DROP FUNCTION IF EXISTS `DateSerial` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `DateSerial`(VARYEAR INT ,VARMONTH INT ,VARDAY INT) RETURNS date
BEGIN

  DECLARE TEMPSTR     TEXT ;

  SET TEMPSTR = CONCAT(VARDAY ,' ' ,VARMONTH ,' ' ,VARYEAR) ;

  RETURN STR_TO_DATE( TEMPSTR ,'%d %m %Y') ;

END $$

DELIMITER ;



Code (C#)
DELIMITER $$

DROP FUNCTION IF EXISTS `CALC_AGE` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `CALC_AGE`(
  _VAR_FROM_DATE DATE ,_VAR_TO_DATE DATE ,_VAR_OUPUT_PATTERN INT
) RETURNS varchar(100) CHARSET tis620
BEGIN

  DECLARE _RET_STR        VARCHAR(100) DEFAULT '' ;
  DECLARE _FROM_DATE      DATE ;
  DECLARE _TO_DATE        DATE ;
  DECLARE _TEMP_DATE      DATE ;
  DECLARE _CARRY_FLAG     INT DEFAULT 0 ;
  DECLARE _MY_YEAR        INT DEFAULT 0 ;
  DECLARE _MY_MONTH       INT DEFAULT 0 ;
  DECLARE _MY_DAY         INT DEFAULT 0 ;

  -- IN MYSQL GREATER THAN DATE COME FIRST IN DATEDIFF FUNC.
  IF (DATEDIFF(_VAR_TO_DATE ,_VAR_FROM_DATE)>=0) THEN
    BEGIN
      SET _TO_DATE = _VAR_TO_DATE ;
      SET _FROM_DATE = _VAR_FROM_DATE ;
    END ;
  ELSE
    BEGIN
      SET _TO_DATE = _VAR_FROM_DATE ;
      SET _FROM_DATE = _VAR_TO_DATE ;
    END;
  END IF;

  -- DAY CALC
  IF (DAY(_FROM_DATE) > DAY(_TO_DATE)) THEN
    BEGIN
      -- FIND LAST DAY OF THIS MONTH
      SET _TEMP_DATE = DATESERIAL(YEAR(_FROM_DATE) ,MONTH(_fROM_DATE) ,1) ;
      SET _TEMP_DATE = DATE_ADD(_TEMP_DATE ,INTERVAL 1 MONTH) ;
      SET _TEMP_DATE = DATE_ADD(_TEMP_DATE ,INTERVAL -1 DAY) ;

      SET _CARRY_FLAG = DAY(_TEMP_DATE) ;
      SET _MY_DAY = (DAY(_TO_DATE) + _CARRY_FLAG) - DAY(_FROM_DATE) ;
      SET _CARRY_FLAG = 1 ;

    END ;
  ELSE
    SET _MY_DAY = DAY(_TO_DATE) - DAY(_FROM_DATE) ;
  END IF ;

  -- MONTH CALC
  IF ((MONTH(_FROM_DATE) + _CARRY_FLAG) > MONTH(_TO_DATE)) THEN
    BEGIN
      SET _MY_MONTH = (MONTH(_TO_DATE) + 12) - (MONTH(_FROM_DATE) + _CARRY_FLAG) ;
      SET _CARRY_FLAG = 1 ;
    END ;
  ELSE
    BEGIN
      SET _MY_MONTH = MONTH(_TO_DATE) - (MONTH(_FROM_DATE) + _CARRY_FLAG) ;
      SET _CARRY_FLAG = 0 ;
    END ;
  END IF ;

  -- YEAR CALC
  SET _MY_YEAR = YEAR(_TO_DATE) - (YEAR(_FROM_DATE) + _CARRY_FLAG) ;

  CASE _VAR_OUPUT_PATTERN
    WHEN 99 THEN
        SET _RET_STR = CONCAT(LPAD(_MY_YEAR ,4 ,'0') ,'.'
          ,LPAD(_MY_MONTH ,2 ,'0') ,'.'
          ,LPAD(_MY_DAY ,2 ,'0')) ;
    ELSE
      BEGIN
        IF(_MY_YEAR > 0 ) THEN
          SET _RET_STR = CONCAT(FORMAT(_MY_YEAR ,0) ,' Year(s) ') ;
        END IF ;
        IF(_MY_MONTH > 0 ) THEN
          BEGIN
            IF (LENGTH(_RET_STR)>0) THEN
              SET _RET_STR = CONCAT(_RET_STR ,', ') ;
            END IF ;
            SET _RET_STR = CONCAT(_RET_STR ,FORMAT(_MY_MONTH ,0) ,' Month(s) ') ;
          END ;
        END IF ;
        IF(_MY_DAY > 0 ) THEN
          BEGIN
            IF (LENGTH(_RET_STR)>0) THEN
              SET _RET_STR = CONCAT(_RET_STR ,', ') ;
            END IF ;
            SET _RET_STR = CONCAT(_RET_STR ,FORMAT(_MY_DAY ,0) ,' Day(s) ') ;
          END ;
        END IF ;
      END ;
  END CASE ;

  RETURN _RET_STR;

END $$

DELIMITER ;

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 05:55:33 By : blurEyes
 


 

No. 5



โพสกระทู้ ( 3,144 )
บทความ ( 1 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


อันไหนคำนวณแล้วเราแก่ ถือว่ามีิี bug คำนวณผิด ฟันธง!!!
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 09:14:34 By : tungman
 


 

No. 6



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


สบายใจได้ค่ะไม่มีคำว่าแก่ที่ตรงไหนเลย มีแต่ตัวเลขค่ะ ^^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 09:48:58 By : blurEyes
 


 

No. 7

Guest


Code
DateTime d1 = new DateTime( 2000, 7, 13 );
DateTime d2 = new DateTime( 2003, 12, 5 );
TimeSpan s = d2 - d1;
int numberofdays = s.TotalDays

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-29 22:24:15 By : ..
 


 

No. 8



โพสกระทู้ ( 83 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากครับ

มีให้ดูหลายแบบอีกตะหาก ^ ^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-01 15:44:38 By : omisuka
 


 

No. 9



โพสกระทู้ ( 110 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณ คุณหมวยมากครับ กว่าผมจะแกะโค้ดได้ ปวดหัวโคดเลย

ใครมือใหม่แบบผม ก็ปวดหัวกันก่อนครับกว่าจะได้ใช้ อิอิ แต่อันนี้แหล่มมากเลยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-03-08 12:07:51 By : Patzy
 


 

No. 10



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

คำนวนวันเวลาซ้ำกันได้ไหมคับ ขอโค้ดตัวอย่างหน่อยคับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-01 11:41:33 By : kimhuncodec
 


 

No. 11



โพสกระทู้ ( 168 )
บทความ ( 0 )



สถานะออฟไลน์


ใช้เป็น แต่ไม่ เข้าใจ

ทักษะ ในการอ่าน code ยังไม่ดี พอ ร้องขอคนชี้แนะ

(เอามาทำเป็นไลบารี่ แล้วเรียก ใช้ในโปรเจค สะดวกมากเลย ขอบคุนครับ)


ประวัติการแก้ไข
2013-03-01 03:34:39
2013-03-01 12:27:14
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-01 03:09:20 By : kyokohoho
 


 

No. 12



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

มีโอกาศได้เขียนไว้เผื่อจะมีประโยชน์

หาค่าต่างจำนวน ชม.
    public static double DateTimeDiffHours(DateTime sStartDate, DateTime sEndDate)
    {
        try
        {
            TimeSpan s = sEndDate - sStartDate;
            double numberofdays = s.TotalHours;
            return Convert.ToDouble(UtilityCls.DisplayAmount2Decimal(numberofdays.ToString(),false));
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            return 0;
        }
    }


หาค่าต่างจำนวนวัน
    public static double DateTimeDiffDays(DateTime sStartDate, DateTime sEndDate)
    {
        try
        {
            return (sEndDate.Date - sStartDate.Date).Days;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            return 0;
        }
    }


คำนวณอายุ
DateTime dob = Convert.ToDateTime("18 Feb 1987");
            DateTime PresentYear = DateTime.Now;
            TimeSpan ts = PresentYear - dob;
            DateTime Age = DateTime.MinValue.AddDays(ts.Days);
            MessageBox.Show(string.Format(" {0} Years {1} Month {2} Days", Age.Year - 1, Age.Month - 1, Age.Day - 1));

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-02-11 11:51:37 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : C# DateDiff ฟังก์ชั่นคำนวนอายุ C# ,Extension method ,MS SQL และ MySQL
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่