Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 年龄计算(年、月、日)_Vbscript_Asp Classic - Fatal编程技术网

Vbscript 年龄计算(年、月、日)

Vbscript 年龄计算(年、月、日),vbscript,asp-classic,Vbscript,Asp Classic,下面的代码返回特定数据库中的年龄 我需要添加什么才能获得年、月、日的确切日期 <%= DateDiff("yyyy",rs("Dateofbirth"),date)%> i、 e.结果应该是12年6个月8天。也许最快最简单的方法是将日期差除以365.25,如下所示: Dim年龄,出生日期 dob=CDate(“1980年1月1日”) 年龄=(现在()-dob)/365.2425 虽然它并不精确,但对于99.99%的使用情况(即,您不需要计算精确到第二秒的情况),它很可能足

下面的代码返回特定数据库中的年龄

我需要添加什么才能获得年、月、日的确切日期

<%= DateDiff("yyyy",rs("Dateofbirth"),date)%>  


i、 e.结果应该是12年6个月8天。

也许最快最简单的方法是将日期差除以365.25,如下所示:

Dim年龄,出生日期
dob=CDate(“1980年1月1日”)
年龄=(现在()-dob)/365.2425
虽然它并不精确,但对于99.99%的使用情况(即,您不需要计算精确到第二秒的情况),它很可能足够精确。

DateDiff(“d”,rs(“Dateofbirth”),date)会给您一些天数。 DateDiff(“m”,rs(“Dateofbirth”),date)会给你几个月

比如(我不知道rs()到底是什么):

但经过一些玩弄之后,它并不总是起作用。差额在某种程度上是四舍五入的。因此,在某些情况下,我会在几天或几个月内出现负数。所以我发疯了,过度保护了代码:

MsgBox(Age("09-12-1946"))
Function Age(DateOfBirth)
    Dim CurrentDate, Years, ThisYear, Months, ThisMonth, Days
    CurrentDate = CDate(DateOfBirth)
    Years = DateDiff("yyyy", CurrentDate, Date)
    ThisYear = DateAdd("yyyy", Years, CurrentDate)
    Months = DateDiff("m", ThisYear, Date)
    ThisMonth = DateAdd("m", Months, ThisYear)
    Days = DateDiff("d", ThisMonth, Date)

    Do While (Days < 0) Or (Months < 0)
        If Days < 0 Then
            Months = Months - 1
            ThisMonth = DateAdd("m", Months, ThisYear)
            Days = DateDiff("d", ThisMonth, Date)
        End If
        If Months < 0 Then
            Years = Years - 1
            ThisYear = DateAdd("yyyy", Years, CurrentDate)
            Months = DateDiff("m", ThisYear, Date)
            ThisMonth = DateAdd("m", Months, ThisYear)
            Days = DateDiff("d", ThisMonth, Date)
        End If
    Loop
    Age = Years & "y/" & Months & "m/" & Days
End Function
MsgBox(年龄(“09-12-1946”))
功能年龄(出生日期)
当前日期、年、今年、月、本月、天
CurrentDate=CDate(出生日期)
年份=日期差(“yyyy”,当前日期,日期)
ThisYear=日期添加(“yyyy”,年份,当前日期)
月份=日期差(“m”,今年,日期)
ThisMonth=日期添加(“m”,月份,今年)
天=日期差(“d”,本月,日期)
在(天<0)或(月<0)期间执行
如果天数小于0,则
月=月-1
ThisMonth=日期添加(“m”,月份,今年)
天=日期差(“d”,本月,日期)
如果结束
如果月份小于0,则
年=年-1
ThisYear=日期添加(“yyyy”,年份,当前日期)
月份=日期差(“m”,今年,日期)
ThisMonth=日期添加(“m”,月份,今年)
天=日期差(“d”,本月,日期)
如果结束
环
年龄=年&“y/”月&“m/”日
端函数

它可能是过度防御的代码(有许多重复的行,很糟糕),但它可以工作。我让你把它弄得更漂亮。或者询问代码审查,以获得更好的代码。

根据其他问题中的年龄计算,提出此问题,以便进行更准确的年龄检查

Dim年龄、当前日期、出生日期
CurrentDate=Now()
出生日期=CDate(rs(“出生日期”)和“”)
'转换为YYYYMMDD
当前日期=年(当前日期)和右(“00”和月(当前日期),2)和右(“00”和日(当前日期),2)
生日=年(生日)和右(“00”和月(生日),2)和右(“00”和日(生日),2)
年龄=固定值((0+当前日期-出生日期)/10000)
回答:书写年龄

基于from

这是特定代码的最终答案

函数getAge(出生日期) “以年为单位变老 ageyears=DateDiff(“yyyy”,出生日期,日期())

“获取dob月份”
出生月份=月份(出生日期)
“每个月的今天
CurrMonth=月(日)
“得到多布的日子
ageDay=天(日期)
如果当前月份<出生月份,则
AGEMONH=12+当前月-出生月
其他的
AGEMONH=当前月份-出生月份
如果结束
年龄=年龄年、年、月、日、日
年龄
端函数

谢谢大家的帮助

请尝试以下代码:

' Usage:
' GetDiff(date1, date2, accuracy)
' date1 - first date
' date2 - second date
' accuracy - output format: from 1 (N years) to 6 (N years, N months, N days, N hours, N minutes, N seconds)

MsgBox GetDiff(CDate("09-11-2014 10:55:30"), CDate("08-10-2016 15:45:10"), 6)

Function GetDiff(d1, d2, a)
    Dim r
    ReDim r(a - 1)
    Delta 0, Array("yyyy", "m", "d", "h", "n", "s"), Array("years", "months", "days", "hours", "minutes", "seconds"), r, d1, d2, False
    GetDiff = Join(r, ", ")
End Function

Sub Delta(i, t, n, r, d1, d2, c)
    Dim q, d
    q = DateDiff(t(i), d1, d2)
    If UBound(r) > i Then
        Do
            d = DateAdd(t(i), q, d1)
            Delta i + 1, t, n, r, d, d2, c
            If c Then Exit Do
            q = q - 1
        Loop
    End If
    c = q >= 0
    r(i) = q & " " & n(i)
End Sub

您认为在SQL Server之外进行计算会更准确,它仍然是
DateDiff()
,并且以完全相同的方式工作。来自.Related的后续问题。事实上,它确实带来了年龄。我确实运行了它,得到了一个大致的年龄,虽然不准确,但我不确定它是否高达99.99%,基本上,离生日越近(),它的准确度就越低。最多大约一天。我尝试将代码缩短为:一个改进的版本:函数getAge(DateOfBirth)age=DateDiff(yyyy,DateOfBirth,Getdate())如果date()'get month of dob BirthMonth = Month(DateOfBirth) 'get todays month CurrMonth = Month(date) 'get day of dob ageDay = Day(Date) If CurrMonth< BirthMonth Then Agemonth= 12 + CurrMonth - BirthMonth else agemonth = CurrMonth - BirthMonth end if Age= ageyears&"years "&ageMonth&" months "&ageDay& "days" getAge =Age
' Usage:
' GetDiff(date1, date2, accuracy)
' date1 - first date
' date2 - second date
' accuracy - output format: from 1 (N years) to 6 (N years, N months, N days, N hours, N minutes, N seconds)

MsgBox GetDiff(CDate("09-11-2014 10:55:30"), CDate("08-10-2016 15:45:10"), 6)

Function GetDiff(d1, d2, a)
    Dim r
    ReDim r(a - 1)
    Delta 0, Array("yyyy", "m", "d", "h", "n", "s"), Array("years", "months", "days", "hours", "minutes", "seconds"), r, d1, d2, False
    GetDiff = Join(r, ", ")
End Function

Sub Delta(i, t, n, r, d1, d2, c)
    Dim q, d
    q = DateDiff(t(i), d1, d2)
    If UBound(r) > i Then
        Do
            d = DateAdd(t(i), q, d1)
            Delta i + 1, t, n, r, d, d2, c
            If c Then Exit Do
            q = q - 1
        Loop
    End If
    c = q >= 0
    r(i) = q & " " & n(i)
End Sub