我有这段代码可以显示文件的天数(按天数):
{{1}}
无论如何,我是否可以将其转换为这样的格式,比如说“ 0年3个月3天”?
答案 0 :(得分:0)
正如其他用户已经指出的那样,您会遇到麻烦,因为不同的月份有不同的天数和周数(并且给定的年份也可能有不同的天数)。
我认为您最好的选择是“假设”一个月有给定的天数(例如30天),并且您不在in年。然后您的算法将如下所示:
Private Const DAYS_IN_YEAR As Integer = 365
Private Const DAYS_IN_MONTH As Integer = 30
Public Sub OutputElapsed(days As Integer)
Dim years As Integer, months As Integer, daysRemaining As Integer
years = Int(days / DAYS_IN_YEAR)
daysRemaining = days - (years * DAYS_IN_YEAR)
months = Int(daysRemaining / DAYS_IN_MONTH)
daysRemaining = daysRemaining - (months * DAYS_IN_MONTH)
Debug.Print _
years & " years, " & _
months & " months, " & _
daysRemaining & " days"
End Sub
答案 1 :(得分:0)
这是我的解决方案。我在公司中使用它,尽管它是用印度尼西亚语编写的,因为这就是我的来历。它是一个带有两个参数的函数:tanggal_akhir(转换为“开始日期”)和tanggal_mulai(转换为“结束日期”)。公式为BEDATANGGAL,表示“日期差异”。希望对您有所帮助。
Function BEDATANGGAL(tanggal_mulai As Date, tanggal_akhir As Date)
Dim hari As Integer
Dim bulan As Integer
Dim tahun As Integer
Dim durasi As Integer
Dim tambah As Date
hari = 0
bulan = 0
tahun = 0
tambah = tanggal_mulai
durasi = DateDiff("d", tanggal_mulai, tanggal_akhir) - 1
For i = 0 To durasi
hari = hari + 1
tambah = tambah + 1
If Day(tanggal_mulai) = Day(tambah) Then
hari = 0
bulan = bulan + 1
End If
If bulan = 12 Then
hari = 0
bulan = 0
tahun = tahun + 1
End If
Next i
BEDATANGGAL = tahun & " tahun, " & bulan & " bulan, " & hari & " hari"
End Function
答案 2 :(得分:0)
泰勒对上述答案的修改
Function date_duration(start_date, end_date)
'Worksheet Variables
Dim dateCell, outputCell As Range
'Date variables
Dim fileDate, curDate, tempDate As Date
Dim fileYear, curYear, tempYear, years, _
fileMonth, curMonth, tempMonth, months, _
fileDay, curDay, tempDay, days, _
curDPM, fileDPM _
As Integer
'Get date of file and calculate year, month, and day
fileDate = start_date
fileYear = CInt(Split(fileDate, "/")(2))
fileMonth = CInt(Split(fileDate, "/")(0))
fileDay = CInt(Split(fileDate, "/")(1))
'Get the current date, year, month, and day
curDate = end_date
curYear = CInt(Split(curDate, "/")(2))
curMonth = CInt(Split(curDate, "/")(0))
curDay = CInt(Split(curDate, "/")(1))
'Calculate years passed
If curYear > fileYear Then
years = curYear - fileYear
End If
If years = "" Then
years = 0
End If
'Calculate months passed
If curMonth > fileMonth Then
months = curMonth - fileMonth
ElseIf curMonth = fileMonth Then
months = 0
ElseIf curMonth < fileMonth Then
months = (12 - fileMonth) + curMonth
End If
'Calculates days per month (DPM) for current year
Select Case curMonth
Case 4 Or 6 Or 9 Or 11
'31-Day months
'April, June, September, November.
curDPM = 30
Case 2
'February will either have 29 or 28 days
'If the current year is divisible by 4 it
'is a leap year and there are 29
curDPM = IIf(curYear Mod 4 = 0, 29, 28)
Case Else
'31-Day months
curDPM = 31
End Select
'Calculates days per month (DPM) for file year
Select Case fileMonth
Case 4 Or 6 Or 9 Or 11
fileDPM = 30
Case 2
fileDPM = IIf(fileYear Mod 4 = 0, 29, 28)
Case Else
fileDPM = 31
End Select
'Calculates days passed
If curDay > fileDay Then
days = curDay - fileDay
ElseIf (curDay = fileDay) Then
days = 0
ElseIf (curDay < fileDay) Then
days = (fileDPM - fileDay) + curDay
End If
'years, months, and days are calculate independently
'so this loop corrects them to work together
'Ex: 12/31/2000 to 1/1/2001 would be 1 year, 1 month, 1 day without this loop
Do
tempDate = DateAdd("yyyy", years, fileDate)
tempDate = DateAdd("m", months, tempDate)
tempDate = DateAdd("d", days, tempDate)
tempYear = CInt(Split(tempDate, "/")(2))
tempMonth = CInt(Split(tempDate, "/")(0))
tempDay = CInt(Split(tempDate, "/")(1))
If tempYear > curYear Then
years = years - 1
ElseIf tempYear < curYear Then
years = years + 1
End If
If tempMonth > curMonth Then
months = months - 1
ElseIf tempMonth < tempMonth Then
months = months + 1
End If
If tempDay > curDay Then
days = days - 1
ElseIf tempDay < curDay Then
days = days + 1
End If
Loop While tempDate <> curDate
'Set cell to display time passed
date_duration = years & " Years, " & months & " Months, " & days & " Days"
End Function
答案 3 :(得分:-1)
尝试以下操作。
date_created = Worksheets("FileCleaner").Range("D" & startrow).Value
File_Age_Day = DatePart("yyyy", date_created) & " years, " & DatePart("M",
date_created) & " Months, " & DatePart("d", date_created) & " days"
Worksheets("FileCleaner").Range("E" & startrow).Value = File_Age_Day