 |
|
C# DateDiff ฟังก์ชั่นคำนวนอายุ C# ,Extension method ,MS SQL และ MySQL |
|
 |
|
|
 |
 |
|
เป็นฟังก์ชั่นคำนวนอายุแบบละเอียดโดยจะผลลัพธ์เป็น ปี และ เศษเดือนเศษวัน(ถ้ามี)
เช่น 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
|
 |
 |
 |
 |
Date :
2010-09-29 05:41:25 |
By :
blurEyes |
View :
18115 |
Reply :
12 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อันไหนคำนวณแล้วเราแก่ ถือว่ามีิี bug คำนวณผิด ฟันธง!!!
|
 |
 |
 |
 |
Date :
2010-09-29 09:14:34 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สบายใจได้ค่ะไม่มีคำว่าแก่ที่ตรงไหนเลย มีแต่ตัวเลขค่ะ ^^
|
 |
 |
 |
 |
Date :
2010-09-29 09:48:58 |
By :
blurEyes |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากครับ
มีให้ดูหลายแบบอีกตะหาก ^ ^
|
 |
 |
 |
 |
Date :
2010-10-01 15:44:38 |
By :
omisuka |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณ คุณหมวยมากครับ กว่าผมจะแกะโค้ดได้ ปวดหัวโคดเลย
ใครมือใหม่แบบผม ก็ปวดหัวกันก่อนครับกว่าจะได้ใช้ อิอิ แต่อันนี้แหล่มมากเลยครับ
|
 |
 |
 |
 |
Date :
2011-03-08 12:07:51 |
By :
Patzy |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คำนวนวันเวลาซ้ำกันได้ไหมคับ ขอโค้ดตัวอย่างหน่อยคับ
|
 |
 |
 |
 |
Date :
2012-09-01 11:41:33 |
By :
kimhuncodec |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใช้เป็น แต่ไม่ เข้าใจ
ทักษะ ในการอ่าน code ยังไม่ดี พอ ร้องขอคนชี้แนะ
(เอามาทำเป็นไลบารี่ แล้วเรียก ใช้ในโปรเจค สะดวกมากเลย ขอบคุนครับ)
|
ประวัติการแก้ไข 2013-03-01 03:34:39 2013-03-01 12:27:14
 |
 |
 |
 |
Date :
2013-03-01 03:09:20 |
By :
kyokohoho |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มีโอกาศได้เขียนไว้เผื่อจะมีประโยชน์
หาค่าต่างจำนวน ชม.
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|