将天数转换为年、月、日

本文关键字:转换 | 更新日期: 2023-09-27 17:53:01

我需要将天数转换为年、月、日。

示例:根据join(DOJ)的日期和Relieve(DOR)的日期计算员工经验。我们有一个DOJ, DOR and Number的天数,他是一个雇员。

必须计算多少年,多少月,多少天。

Example       : DOJ = 14 Feb 2000
                DOR = 08 aug 2013
Output        : 13 Years - 5 Months - 25 Days

Thanks in Advance....

将天数转换为年、月、日

这个适合我:

var dor = new DateTime(2013, 08, 08);
var doj = new DateTime(2000, 02, 14);
var totalmonths = (dor.Year - doj.Year) * 12 + dor.Month - doj.Month;
totalmonths += dor.Day < doj.Day ? -1 : 0;
var years = totalmonths / 12;
var months = totalmonths % 12;
var days = dor.Subtract(doj.AddMonths(totalmonths)).Days;

您无法将天数转换为年、月和日,因为您不知道这些日子位于何处。例如,它们可能跨越闰年的2月29日。

但是你已经有两个日期要处理,所以你可以这样计算这个值:

Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
    Dim doj As Date = New Date(2000, 2, 14)
    Dim dor As Date = New Date(2013, 8, 8)
    MessageBox.Show(GetDateSpanText(doj, dor))
End Sub
Public Shared Function GetDateSpanText(fromDate As DateTime, Optional toDate As DateTime = Nothing) As String
    Try
        Dim years As Integer = 0, months As Integer = 0, days As Integer = 0
        If toDate = Nothing Then toDate = DateTime.Now
        Do Until toDate.AddYears(-1) < fromDate
            years += 1
            toDate = toDate.AddYears(-1)
        Loop
        Do Until toDate.AddMonths(-1) < fromDate
            months += 1
            toDate = toDate.AddMonths(-1)
        Loop
        Do Until toDate.AddDays(-1) < fromDate
            days += 1
            toDate = toDate.AddDays(-1)
        Loop
        Return String.Format("{0} Years {1} Months {2} Days", years, months, days)
    Catch ex As Exception
        Return "Error"
    End Try
End Function

您可以使用年和月从月计算,如果您有30个月,那么它将返回2年和6个月,使用以下代码。

Math.Round((double)Months/12,0) Years and Month%12 Months