找回密码
 加入
搜索
查看: 1317|回复: 4

[网络通信] [已解决]日期格式分隔符相互转换UDF

[复制链接]
发表于 2020-4-20 16:53:12 | 显示全部楼层 |阅读模式
本帖最后由 elexy 于 2020-4-20 21:31 编辑
$str=20200407
$expstr = '2020/4/7'   ;不满2位不带0的日期格式
各位老师好,两种日期如何实现简便的【双向】转换,自己写的很拙劣,看不下去了,有没有UDF或是优雅的写法?感谢赐教

发表于 2020-7-8 11:04:53 | 显示全部楼层
本帖最后由 afan 于 2020-7-8 11:13 编辑
fyq 发表于 2020-7-8 10:43
老大,还有点问题,你将Local $str = 20200418改为Local $str = 20201018试一下,会是2020/1/18

的确是,需改一下
Local $str = 20201018;20200418
Local $expstr = '2020/4/17'

MsgBox(0, '不要分隔符', $str & '        ->        ' & _DateSepFormat($str) & @LF & _
                $expstr & '        ->        ' & _DateSepFormat($expstr))

MsgBox(0, '使用 / 分隔符', $str & '        ->        ' & _DateSepFormat($str, '/') & @LF & _
                $expstr & '        ->        ' & _DateSepFormat($expstr, '/'))

MsgBox(0, '使用 - 分隔符', $str & '        ->        ' & _DateSepFormat($str, '-') & @LF & _
                $expstr & '        ->        ' & _DateSepFormat($expstr, '-'))

Func _DateSepFormat($sDate, $sSep = '') ; 日期有否分隔符互转
;~         ###(日期,分隔符)
        If $sSep = '' Then
                If StringRegExp($sDate, '^\d{8}$') Then Return $sDate
                Local $aData = StringRegExp($sDate, '^(\d{4})\D+(\d{1,2})\D+(\d{1,2})$', 1)
                If @error Then Return SetError(1, 0, '')
                Return StringFormat('%s%02s%02s', $aData[0], $aData[1], $aData[2])
        EndIf
        If StringRegExp($sDate, '^\d{8}$') Then
                Local $aData = StringRegExp($sDate, '^(....)(?|0(.)|(..))(?|0(.)|(..))$', 1)
        Else
                Local $aData = StringRegExp($sDate, '^(\d{4})\D+(\d{1,2})\D+(\d{1,2})$', 1)
        EndIf
        If @error Then Return SetError(1, 0, '')
        Return $aData[0] & $sSep & $aData[1] & $sSep & $aData[2]
EndFunc   ;==>_DateSepFormat

评分

参与人数 1金钱 +10 收起 理由
dequan_vip + 10 很给力!

查看全部评分

发表于 2020-4-20 19:51:38 | 显示全部楼层
本帖最后由 afan 于 2020-4-20 19:56 编辑

Local $str = 20200418
Local $expstr = '2020/4/17'

MsgBox(0, '不要分隔符', $str & '        ->        ' & _DateSepFormat($str) & @LF & _
                        $expstr & '        ->        ' & _DateSepFormat($expstr))

MsgBox(0, '使用 / 分隔符', $str & '        ->        ' & _DateSepFormat($str, '/') & @LF & _
                        $expstr & '        ->        ' & _DateSepFormat($expstr, '/'))

MsgBox(0, '使用 - 分隔符', $str & '        ->        ' & _DateSepFormat($str, '-') & @LF & _
                        $expstr & '        ->        ' & _DateSepFormat($expstr, '-'))

Func _DateSepFormat($sDate, $sSep = '') ; 日期有否分隔符互转
;~         ###(日期,分隔符)
        If $sSep = '' Then
                If StringRegExp($sDate, '^\d{8}$') Then Return $sDate
                Local $aData = StringRegExp($sDate, '^(\d{4})\D+(\d{1,2})\D+(\d{1,2})$', 1)
                If @error Then Return SetError(1, 0, '')
                Return StringFormat('%s%02s%02s', $aData[0], $aData[1], $aData[2])
        EndIf
        If StringRegExp($sDate, '^\d{8}$') Then
                Local $aData = StringRegExp($sDate, '(....)(?:0?(.|..))(?:0?(.|..)$)', 1)
        Else
                Local $aData = StringRegExp($sDate, '^(\d{4})\D+(\d{1,2})\D+(\d{1,2})$', 1)
        EndIf
        If @error Then Return SetError(1, 0, '')
        Return $aData[0] & $sSep & $aData[1] & $sSep & $aData[2]
EndFunc   ;==>_DateSepFormat
 楼主| 发表于 2020-4-20 21:30:51 | 显示全部楼层
MsgBox(0, _DateSepFormat($str, '/'), _DateSepFormat($expstr))
完美解决,感谢超版的无敌正则,神乎其技。
发表于 2020-7-8 10:43:05 | 显示全部楼层
老大,还有点问题,你将Local $str = 20200418改为Local $str = 20201018试一下,会是2020/1/18

评分

参与人数 1金钱 +30 贡献 +1 收起 理由
afan + 30 + 1 反馈+

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 10:20 , Processed in 0.095301 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表