MsgBox % DateParse("2022-8-7") "`n" DateParse("2022-08-07") "`n" DateParse("2022年8月7日")

; https://github.com/Paris/AutoHotkey-Scripts/blob/master/DateParse.ahk

/*
  函数:DateParse
    将几乎任何日期格式转换为YYYYMMDDHH24MISS值。
  参数:
    str-作为字符串的日期/时间戳
  返回:
    一个有效的YYYYMMDDHH24MISS值,可由FormatTime、EnvAdd和其他时间命令使用。
  实例:
> time := DateParse("2:35 PM, 27 November, 2007")
  许可证:
    - Version 1.05 <http://www.autohotkey.net/~polyethene/#dateparse>
    - Dedicated to the public domain (CC0 1.0) <http://creativecommons.org/publicdomain/zero/1.0/>
*/
DateParse(str) {
  static e2 = "i)(?:(\d{1,2}+)[\s\.\-\/,]+)?(\d{1,2}|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\w*)[\s\.\-\/,]+(\d{2,4})"
  str := RegExReplace(str, "((?:" . SubStr(e2, 42, 47) . ")\w*)(\s*)(\d{1,2})\b", "$3$2$1", "", 1)
  If RegExMatch(str, "i)^\s*(?:(\d{4})([\s\-:\/])(\d{1,2})\2(\d{1,2}))?"
    . "(?:\s*[T\s](\d{1,2})([\s\-:\/])(\d{1,2})(?:\6(\d{1,2})\s*(?:(Z)|(\+|\-)?"
    . "(\d{1,2})\6(\d{1,2})(?:\6(\d{1,2}))?)?)?)?\s*$", i)
    d3 := i1, d2 := i3, d1 := i4, t1 := i5, t2 := i7, t3 := i8
  Else If !RegExMatch(str, "^\W*(\d{1,2}+)(\d{2})\W*$", t)
    RegExMatch(str, "i)(\d{1,2})\s*:\s*(\d{1,2})(?:\s*(\d{1,2}))?(?:\s*([ap]m))?", t)
      , RegExMatch(str, e2, d)
  f = %A_FormatFloat%
  SetFormat, Float, 02.0
  d := (d3 ? (StrLen(d3) = 2 ? 20 : "") . d3 : A_YYYY)
    . ((d2 := d2 + 0 ? d2 : (InStr(e2, SubStr(d2, 1, 3)) - 40) // 4 + 1.0) > 0
      ? d2 + 0.0 : A_MM) . ((d1 += 0.0) ? d1 : A_DD) . t1
      + (t1 = 12 ? t4 = "am" ? -12.0 : 0.0 : t4 = "am" ? 0.0 : 12.0) . t2 + 0.0 . t3 + 0.0
  SetFormat, Float, %f%
  Return d
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。