(view source code of datepart.bat as plain text)
@ECHO OFF
ECHO.
:: Check Windows version (XP Pro or later)IF NOT "%OS%"=="Windows_NT" GOTO Syntax
:: Check command line argument (one mandatory)IF "%~1"=="" GOTO Syntax
IF NOT "%~2"=="" GOTO Syntax
:: Check if help is requiredECHO.%1 | FINDSTR.EXE /R /C:"[/?\.]" >NUL && GOTO Syntax
:: Check if WMIC is availableWMIC.EXE Alias /? >NUL 2>&1 || GOTO Syntax
:: Localize variablesSETLOCAL ENABLEDELAYEDEXPANSION
:: Reset/initialize the variables usedSET DatePart=
SET Day=
SET Month=
SET Year=
SET Error=0
:: Fill array with valid argumentsSET DatePart.d=Day
SET DatePart.Day=Day
SET DatePart.h=Hour
SET DatePart.Hour=Hour
SET DatePart.i=DST
SET DatePart.DST=DST
SET DatePart.l=LeapYear
SET DatePart.LeapYear=LeapYear
SET DatePart.m=Month
SET DatePart.Month=Month
SET DatePart.n=Minute
SET DatePart.Minute=Minute
SET DatePart.q=Quarter
SET DatePart.Quarter=Quarter
SET DatePart.s=Second
SET DatePart.Second=Second
SET DatePart.w=DayOfWeek
SET DatePart.DayOfWeek=DayOfWeek
SET DatePart.ww=WeekOfYear
SET DatePart.WeekOfYear=WeekOfYear
SET DatePart.y=DayOfYear
SET DatePart.DayOfYear=DayOfYear
SET DatePart.yyyy=Year
SET DatePart.Year=Year
:: If DST test is requested, check if PHP is availableIF "!DatePart.%~1!"=="DST" (
PHP
):: Get current day, month, year and determine if we have a leap yearCALL :Today
CALL :LeapYear
ECHO.!DatePart.%~1! | FIND /I "OfYear" >NUL && (
CALL :DayOfYear
CALL :WeekOfYear
):: Check if command line argument is listed in arraySET DatePart. | FINDSTR /R /I /C:"\.%~1=" >NUL
IF ERRORLEVEL 1 (
ENDLOCAL
GOTO Syntax
):: If the value is already stored in a variable use that variable, otherwise use WMIC.IF DEFINED !DatePart.%~1! (
SET DP=!DatePart.%~1!
CALL SET DatePart=%%!DP!%%
) ELSE (
FOR /F "skip=1" %%A IN ('WMIC Path Win32_LocalTime Get !DatePart.%~1! /Format:table 2^>NUL ^|^| SET Error=1') DO (
IF "!DatePart!"=="" SET DatePart=%%A
)):: Display resultECHO.%DatePart%
:: Check for errors trapped by WMICIF "%Error%"=="1" (
ENDLOCAL
GOTO Syntax
):: DoneENDLOCAL & SET DatePart=%DatePart%
EXIT /B %DatePart%
:DayOfYear:: Fill array with cumulative number of days of past monthsSET /A DaysPast.1 = 0
SET /A DaysPast.2 = %DaysPast.1% + 31
SET /A DaysPast.3 = %DaysPast.2% + 28 + %LeapYear%
SET /A DaysPast.4 = %DaysPast.3% + 31
SET /A DaysPast.5 = %DaysPast.4% + 30
SET /A DaysPast.6 = %DaysPast.5% + 31
SET /A DaysPast.7 = %DaysPast.6% + 30
SET /A DaysPast.8 = %DaysPast.7% + 31
SET /A DaysPast.9 = %DaysPast.8% + 31
SET /A DaysPast.10 = %DaysPast.9% + 30
SET /A DaysPast.11 = %DaysPast.10% + 31
SET /A DaysPast.12 = %DaysPast.11% + 30
SET /A DayOfYear = !DaysPast.%Month%! + %Day%
GOTO:EOF
:LeapYearSET LeapYear=0
SET /A "Test = %Year% %% 4"
IF %Test% EQU 0 SET LeapYear=1
SET /A "Test = %Year% %% 100"
IF %Test% EQU 0 SET LeapYear=0
SET /A "Test = %Year% %% 400"
IF %Test% EQU 0 SET LeapYear=1
GOTO:EOF
:TodayFOR /F "skip=1 tokens=1-4" %%A IN ('WMIC Path Win32_LocalTime Get Day^,DayOfWeek^,Month^,Year /Format:table 2^>NUL ^|^| SET Error=1') DO (
IF "!Day!"=="" SET Day=%%A
IF "!DayOfWeek!"=="" SET DayOfWeek=%%B
IF "!Month!"=="" SET Month=%%C
IF "!Year!"=="" SET Year=%%D
)IF %DayOfWeek% EQU 0 SET DayOfWeek=7
GOTO:EOF
:WeekOfYearSET /A ThisWeeksSunday = %DayOfYear% - %DayOfWeek% + 7
SET /A WeekOfYear = %ThisWeeksSunday% / 7
SET /A FirstThursday = %ThisWeeksSunday% - 7 * %WeekOfYear% + 4
IF %FirstThursday% GTR 7 SET /A WeekOfYear += 1
GOTO:EOF
:SyntaxECHO DatePart.bat, Version 3.20 for Windows XP Professional and later
ECHO Returns the specified part of the current date or time
ECHO.
ECHO Usage: DATEPART option
ECHO.
ECHO Option: d or Day Returns: day of month
ECHO h or Hour hour
ECHO i or DST DST (1 if true, 0 if not) **
ECHO l or LeapYear leap year (1 if true, 0 if not)
ECHO m or Month month
ECHO n or Minute minutes
ECHO q or Quarter quarter
ECHO s or Second seconds
ECHO w or DayOfWeek day of week
ECHO ww or WeekOfYear ISO week number
ECHO y or DayOfYear day of year
ECHO yyyy or Year year
ECHO.
ECHO Notes: All values are numeric, without leading zeros, and are returned
ECHO on screen, as "errorlevel" and in variable %%DatePart%%.
ECHO Week 0 means the last week (52 or 53) of the previous year.
ECHO DST check will only work if PHP is installed.
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com
page last modified: 2025-10-11; loaded in 0.0067 seconds