比如
2006-06-12
2006.06.12
20060612
2006/06/12
060612
都能返回2006-06-12的一个函数,怎么写。

解决方案 »

  1.   

    这是我的简单思路,未经测试Private Sub ……
        结果 = Format(Right(prvToDate("要转换的字符串"), 8), "####-##-##")
    End SubPrivate Function prvToDate(strDate As String)
        Dim lngI As Long
        For lngI = 1 To Len(strDate)
            If IsNumeric(Mid(strDate, lngI, 1)) Then
                prvToDate = prvToDate & Mid(strDate, lngI, 1)
            End If
        Next
        prvToDate = "20" & prvToDate    '具体根据你的需要判断是“19”还是“20”什么的
    End Function
      

  2.   

    ?autodate("060612")
    2006-06-12
    ?autodate("2006.06.12")
    2006-06-12
    ?autodate("2006/06/12")
    2006-06-12'自动格式化日期
    Function AutoDate(ByVal str As String) As String
        Dim i As Integer
        Dim subStr As String
        
        If IsDate(str) Then
            AutoDate = Format(CDate(str), "yyyy-mm-dd")
        Else
            For i = 1 To Len(str)
                subStr = Mid(str, i, 1)
                If InStr("0123456789", subStr) = 0 Then
                    str = Replace(str, subStr, "")
                    Exit For
                End If
            Next
            If Len(str) = 6 Then
                str = "20" & str
            End If
            AutoDate = Format(str, "####-##-##")
        End If
    End Function
      

  3.   

    楼主应该在输入的时候做一个格式化限定,比如限定日期的输入方式为:yyyy/mm/dd等等。
    而不是想一个什么“万能”的函数来转换。这是根本不切实际的。
    比如要是给你个 060304
    如果你不加事先限定的话,到底是2006年3月4日?还是2006年4月3日?还是2004年6月3日?还是2004年3月6日?。严格限定输入格式可以让你的程序更加强壮。
      

  4.   

    使用OFFICE中带的那个日历控件,就可以很简单的做到日期输入格式化限定了,用户只能通过在日历上点一个时间来输入,而不是随心所欲的乱填一气了,并且这样也会让人觉得你的程序界面更好
      

  5.   

    输入上做限制才是治标治本的好办法masked edit