Tweets from pichat

PichatFollow my new user account @markseu
About 2 months, 3 weeks ago from Pichat (Pichat Software)

Tweets from 600infos

600infosI HAVE NYANED FOR 888.4 SECONDS! http://t.co/JQYOZebv via @nyannyancat
About 3 months, 3 weeks ago from 600infos (Wolf)

Wochentag eines Datums bestimmen/berechnen

Quelle: http://www.600infos.de/index.php?option=com_content&view=article&id=59:wochentag-eines-datums-bestimmen&catid=6:dos-allgemein&Itemid=18

Hier ein Commando - Script ( DOS - Batch ) welches den Wochentag eines beliebigen Datums bestimmt…

weekday.cmd kann den eigenen Bedürfnissen angepasst werden und übergibt die Parameter als SET Variablen

Für die Suchmaschinen: Commando, Script, cmd, Windows, DOS, Batch, bat, Wochentag, beliebiges Datum bestimmen, berechnen

Zuvor noch ein kleines Script zum testen:

weekday_test.cmd
@echo off
  setlocal ENABLEDELAYEDEXPANSION enableextensions
  for /l %%a in (0,1,99) do (
      call weekday.cmd 31.12.%%a
      echo !_date! !_ww! !_cwwy!
  )

CODE

weekday.cmd
@echo off
setlocal
set _thisfile=%~nx0
REM ############################################################################
REM
REM weekday.cmd created by Mark Wolfgruber 600infos.de
REM
REM Feature Requests:
REM if you need it ... let me know!
REM - i'm searching for a good translation
REM - calculate x-days ago
REM - calculate in x-days
REM - no more open requests
REM
REM open BUGs:
REM - no more known bugs at the moment
REM
REM Version 0.0.5 Mark Wolfgruber 10.12.2010
REM - add julian day number - works only between 1801 and 2099 
REM
REM Version 0.0.4 Mark Wolfgruber 10.12.2010
REM - BUG: weekday.cmd calc sometimes wrong year if the week is in the new year
REM - set _thisfile=%~nx0 # now dynamic filename
Rem - new var: _cy - for the Year of the Calenderweek
Rem - new var: _y - for the Year number without leading 0
REM - modify help file
REM - description of the enviroment variables 
REM - modified for using as a procedure
REM
REM Version 0.0.3c Mark Wolfgruber 28.04.2009
REM - BUG: Year 00-09 was 20000 - 20009 now it is 2000 - 2009
REM - BUG: Weekday at the end of the year  is possible in cw 1
REM - new option /clear
REM - new option 0
REM - modify help file
REM
REM Version 0.0.3 Mark Wolfgruber 20.04.2009
REM - Variable _cwy replace _cw (Format: WEEK/YEAR)
REM - new Variable _cw (Format: WEEK)
REM - add a help
REM - validate the date
REM - _language_default=de
REM - add _thisfile
REM - BUG: Year 0-9 was 200 - 209 now it is 2000 - 2009
REM
REM Version 0.0.2 Mark Wolfgruber 15.04.2009
REM - BUG-Behebung: Eingabe jetzt in _date (statt in _input)
REM - Ergänze ein paar REM-Zeilen
REM - Tag des Jahres berechnen
REM - Schaltjahre (en: leap year)
REM   ~ sind alle Jahre, deren Jahreszahl ohne Rest durch vier teilbar sind.
REM   Der 29. Februar wird als Schalttag eingefügt.
REM   Alle Jahre, welche ohne Rest durch 100 teilbar sind, sind keine Schaltjahre.
REM   Ausgenommen von dieser Schaltjahresregelung sind volle Jahrhunderte, die
REM   nicht ohne Rest durch 400 teilbar sind.
REM   (2000 war ein Schaltjahr, 1900 nicht)
REM - Kalenderwoche berechnen
REM   Grundlage:
REM   http://de.wikipedia.org/wiki/Woche#Z.C3.A4hlweise_nach_DIN_1355_.2F_ISO_8601
REM   Formel zur Berechung der KW wurde von mir selbst entwickelt und
REM   ist ggf. nochmal zu prüfen
REM   Die Formel basiert auf der Annahme, dass der 4.1. immer in der KW 1 liegt
REM
REM Version 0.0.1 Mark Wolfgruber 14.04.2009
REM
REM zweistellige Jahreszahlen 31-99 werden als 1931-1999 interprediert
REM zweistellige Jahreszahlen 00-30 werden als 2000-2030 interprediert
REM wird keine Jahreszahl angegeben wird das aktuelle Jahr verwendet
REM wird kein Monat angegeben wird das aktuelle Monat verwendet
REM wird kein Tag angegeben wird der aktuelle Tag verwendet
REM Z.Zt. findet keine Prüfung auf unplausible Tage statt
REM
REM Aufruf z.B.
REM für Heute: weekday.cmd %date%
REM für den 1. des Monats: weekday.cmd 1. oder weekday.cmd 0/1
REM ############################################################################
REM
REM Wochentagsberechnung nach Gauß ab 15.10.1582
REM
REM Quelle der Formel: http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Wochentagsformel
REM Umgesetzt in einem DOS-commandozeilen-Script nach einer Idee von Mark Wolfgruber
REM
REM Die Gaußsche Wochentagsformel ist eine Formel von Carl Friedrich Gauß
REM zur Berechnung des Wochentags anhand eines gegebenen Datums.
REM Sie wird häufig für die Berechnung der Wochentage in der Informatik eingesetzt.
REM Die Formel gilt von der Einführung des Gregorianischen Kalenders am 15. Oktober 1582
REM an und prinzipiell solange, bis von diesen Kalenderregeln wieder abgewichen wird,
REM also bis zur nächsten Kalenderreform.
REM
REM ############################################################################
 
:weekday_predifined_vars
  REM if you want to set it befor starting the script please REMark this lines
 
  set _date=
  set _language_default=de
  REM  set _language_output=
 
:weekday_vars
  if "%1" == "0" set _date=%date% 
  REM try an Autodetection
  if "%1" == "" (
    echo %date% | find "." >nul && set _oslanguage=de&& if "%_language_output%"=="" set _language_output=de
    echo %date% | find "/" >nul && set _oslanguage=en&& if "%_language_output%"=="" set _language_output=en
  ) ELSE (
    if "%_language_output%"=="" echo %1 | find "/" >nul && set _language_output=en
    echo %date% | find "/" >nul && set _oslanguage=en
    if "%_language_output%"=="" echo %1 | find "." >nul && set _language_output=de
    echo %date% | find "." >nul && set _oslanguage=de
  )
 
  REM define the output format if no enviroment is set
  if "%_language_output%"=="" set _language_output=%_language_default%
 
  REM to define the os language (date format)
  if %_oslanguage%==""  set _oslanguage=%_language_default%
 
  call :weekday_define_language_output_%_language_output%
 
  if not "%1"=="" set _date=%1
  if /I "%1"=="/h" goto weekday_help
  if /I "%1"=="/help" goto weekday_help
  if /I "%1"=="/?" goto weekday_help
  if /I "%1"=="/clear" goto weekday_clear_vars
 
  if "%_date%"=="" set /p _date=%_ask_for_Date% [%date%]:
  if "%_date%"=="" set _date=%date%
 
  set _date=%_date:-=/%
  REM Autodetection Date-Input-Format
  echo %_date% | find "/" >nul && set _language_input=en
  echo %_date% | find "." >nul && set _language_input=de
 
  REM to define the input format
  if "%_language_input%"=="" set _language_input=%_language_default%
 
:weekday_main
  call :weekday_split_date_%_language_input%
  call :weekday_set_month_value
  call :weekday_set_year_value
  call :weekday_def_leapyear
  call :weekday_calc_weekday
  call :weekday_def_daysb4
  call :weekday_def_cwy
  call :jdate _jd %_dd%.%_mm%.%_yyyy%
  
rem  echo %_dd%.%_mm%.%_yyyy% = %_jd%
 
  endlocal & (
    set _cw=%_cw%
    set _cwy=%_cwy%
    set _cy=%_cy%
    set _d=%_d%
    set _dayofyear=%_dayofyear%
    set _dd=%_dd%
    set _jd=%_jd%
    set _language_output=%_language_output%
    set _leapyear=%_leapyear%
    set _longdate=%_longdate%
    set _m=%_m%
    set _mm=%_mm%
    set _w=%_w%
    set _ww=%_ww%
    set _www=%_www%
    set _cent=%_cent%
    set _y=%_y%
    set _yy=%_yy%
    set _yyyy=%_yyyy%
  )
  call :weekday_format_output_date_strings
 
  REM call :weekday_show_set_enviroment_output
  REM call :weekday_display
 
goto weekday_end

REM ############################################################################
 
::weekday_functions
 
:weekday_show_set_enviroment_output
  echo.
  echo SET Enviroment-Variables:
  set _
  EXIT /b
 
:weekday_format_output_date_strings
  set _date=%_yyyy%-%_mm%-%_dd%
 
  if %_cw% LEQ 9 (
    set _cww=0%_cw%
  ) ELSE (
    set _cww=%_cw%
  )
 
  set _cwwy=%_cww%/%_cy%
  set _cwy=%_cw%/%_cy%
  set _cwyw=%_cy%_%_cww%
 
  if /I "%_language_output%"=="de" (
    set _longdate=%_www%, %_dd%.%_mm%.%_yyyy%
  ) ELSE (
    set _longdate=%_www%, %_mm%/%_dd%/%_yyyy%
  )
  
  REM more examples ...
  
  rem set _datestr1=%_yyyy%-%_mm%-%_dd%
  rem set _datestr2=%_yy%-%_mm%-%_dd%
  rem set _datestr3=%_yyyy%%_mm%%_dd%
  rem set _datestr4=%_yy%%_mm%%_dd%
  rem set _datestr5=%_yy%%_m%%_d%
 
  EXIT /b
 
:weekday_calc_weekday
  set _d=x0%_dd%
  set _d=%_d:x0=x%
  set _d=%_d:x0=x%
  set _d=%_d:x=%
  set /a _d=%_d%+0
  if %_d% LSS 10 set _dd=0%_d%
  if %_d% GTR 31 set _dd=31& set _d=31
  if %_m% EQU 2 (
    if %_leapyear% EQU 1 (
      if %_d% GTR 29 set _dd=29& set _d=29
    ) ELSE (
      if %_d% GTR 28 set _dd=28& set _d=28
    )
  )
  if %_m% EQU 4 if %_d% GTR 30 set _dd=30& set _d=30
  if %_m% EQU 6 if %_d% GTR 30 set _dd=30& set _d=30
  if %_m% EQU 9 if %_d% GTR 30 set _dd=30& set _d=30
  if %_m% EQU 11 if %_d% GTR 30 set _dd=30& set _d=30

 
  REM Formel: w = (d + [2,6 m – 0,2] + y + [y/4] + [c/4] – 2c) mod 7
  REM wobei für [2,6 m – 0,2] die Liste verwendet wird
  REM Ich nutze den Umstand, dass das Ergebnis nur aus Ganzzahlen besteht
 
  set /a _w0=( %_d% + %_m_val% ) + ( %_y2% ) + ( %_y2% / 4 ) + ( %_c2% / 4 ) - ( 2 * %_c2% )
  set /a _w1=%_w0%/7
  set /a _w=%_w0% - ( %_w1% * 7 )
  if %_w% LSS 0 set /a _w=%_w%+7
  call :weekday_weekdays
  EXIT /b
 
:weekday_weekdays
  REM Korrektur für Sonntag=7 mit &set _w=7
  if "%_w%"=="0" set _www=%_Sun%&set _ww=%_Su%&set _w=7
  if "%_w%"=="1" set _www=%_Mon%&set _ww=%_Mo%
  if "%_w%"=="2" set _www=%_Tue%&set _ww=%_Tu%
  if "%_w%"=="3" set _www=%_Wed%&set _ww=%_We%
  if "%_w%"=="4" set _www=%_Thu%&set _ww=%_Th%
  if "%_w%"=="5" set _www=%_Fri%&set _ww=%_Fr%
  if "%_w%"=="6" set _www=%_Sat%&set _ww=%_Sa%
  EXIT /b
 
:weekday_set_month_value
  set _m=x0%_mm%
  set _m=%_m:x0=x%
  set _m=%_m:x0=x%
  set _m=%_m:x=%
  set /a _m=%_m%+0
  if %_m% LSS 10 set _mm=0%_m%
  if %_m% GTR 12 set _mm=12& set _m=12
 
  REM Liste für [2,6 m – 0,2]
  if %_m% EQU 1 set _m_val=28
  if %_m% EQU 2 set _m_val=31
  if %_m% EQU 3 set _m_val=2
  if %_m% EQU 4 set _m_val=5
  if %_m% EQU 5 set _m_val=7
  if %_m% EQU 6 set _m_val=10
  if %_m% EQU 7 set _m_val=12
  if %_m% EQU 8 set _m_val=15
  if %_m% EQU 9 set _m_val=18
  if %_m% EQU 10 set _m_val=20
  if %_m% EQU 11 set _m_val=23
  if %_m% EQU 12 set _m_val=25
  EXIT /b
 
:weekday_set_year_value
  set _c=%_cent%
  set _c2=%_c%
  set _y=x0%_yy%
  set _y=%_y:x0=x%
  set _y=%_y:x0=x%
  set _y=%_y:x=%
  set /a _y=%_y%+0
  if %_y% LSS 10 set _yy=0%_y%
  set _y2=%_y%
  if %_m% EQU 1 call :weekday_set_correction
  if %_m% EQU 2 call :weekday_set_correction
  EXIT /b
 
:weekday_set_correction
  if "%_y2%"=="0" (
      set _y2=99
      set /a _c2=%_c2%-1
  ) ELSE (
      set /a _y2=%_y2%-1   
  )
  EXIT /b
 
:weekday_define_language_output_
REM default if no datelanguage is set
 
:weekday_define_language_output_en
  set _ask_for_Date=Date
  set _language_output=en
  set _Su=Su
  set _Mo=Mo
  set _Tu=Tu
  set _We=We
  set _Th=Th
  set _Fr=Fr
  set _Sa=Sa
  set _Sun=Sunday
  set _Mon=Monday
  set _Tue=Tuesday
  set _Wed=Wednesday
  set _Thu=Thursday
  set _Fri=Friday
  set _Sat=Saturday
  EXIT /b
 
:weekday_define_language_output_de
  set _ask_for_Date=Bitte ein Datum eingeben
  set _Su=So
  set _Mo=Mo
  set _Tu=Di
  set _We=Mi
  set _Th=Do
  set _Fr=Fr
  set _Sa=Sa
  set _Sun=Sonntag
  set _Mon=Montag
  set _Tue=Dienstag
  set _Wed=Mittwoch
  set _Thu=Donnerstag
  set _Fri=Freitag
  set _Sat=Samstag
  EXIT /b
 
:weekday_split_date_
REM default if no oslanguage is set
 
:weekday_split_date_en
  FOR /F "usebackq tokens=1,2,3,4,* delims=/" %%a IN (`echo %_date%`) DO (
      set _mm=%%a
      set _dd=%%b
      set _yyyy=%%c
  )
  call :weekday_check_date
  set /a _cent=%_yyyy%/100
  set /a _yy=%_yyyy% - ( %_cent% * 100 )
  EXIT /b
 
:weekday_split_date_de
  FOR /F "usebackq tokens=1,2,3,4,* delims=." %%a IN (`echo %_date%`) DO (
      set _dd=%%a
      set _mm=%%b
      set _yyyy=%%c
  )
  call :weekday_check_date
  set /a _cent=%_yyyy%/100
  set /a _yy=%_yyyy% - ( %_cent% * 100 )
  EXIT /b
 
:weekday_check_date
  if "%_dd%"=="" FOR /F " usebackq tokens=1,2,3,4,* delims=./" %%a IN (`echo %date%`) DO (
    if /I "%_oslanguage%"=="de" (
      set _dd=%%a
    ) ELSE (
      set _dd=%%b
    )
  )
 if %_dd% EQU 0 FOR /F " usebackq tokens=1,2,3,4,* delims=./" %%a IN (`echo %date%`) DO (
    if /I "%_oslanguage%"=="de" (
      set _dd=%%a
    ) ELSE (
      set _dd=%%b
    )
  )
 
  if "%_mm%"=="" FOR /F " usebackq tokens=1,2,3,4,* delims=./" %%a IN (`echo %date%`) DO (
    if /I "%_oslanguage%"=="de" (
      set _mm=%%b
    ) ELSE (
      set _mm=%%a
    )
  )
 if %_mm% EQU 0 FOR /F " usebackq tokens=1,2,3,4,* delims=./" %%a IN (`echo %date%`) DO (
    if /I "%_oslanguage%"=="de" (
      set _mm=%%b
    ) ELSE (
      set _mm=%%a
    )
  )
 
  call :weekday_check_year  _yyyy %_yyyy%
  EXIT /b
 
:weekday_check_year
  SETLOCAL
  set YY=%~2
  if "%YY%"=="" FOR /F " usebackq tokens=1,2,3,4,* delims=./" %%a IN (`echo %date%`) DO set YY=%%c

  rem delete 0 as prefix
  set YY=x0%YY%
  set YY=%YY:x0=x%
  set YY=%YY:x0=x%
  set YY=%YY:x0=x%
  set YY=%YY:x=%
  if "%YY%" == "" set YY=0
 
  if %YY% LEQ 30 (
    if %YY% LEQ 9 (
      set YY=200%YY%
    ) ELSE (
      set YY=20%YY%
    )
  ) ELSE (
    if %YY% LEQ 99 set YY=19%YY%
  )
  ENDLOCAL & IF "%~1" NEQ "" (SET %~1=%YY%) ELSE (echo.%YY%)
  EXIT /b
 
:weekday_display
  echo.
  if /I "%_language_output%"=="de" (
    echo Der %_dd%.%_mm%.%_cent%%_yy% ist ein %_www% ^(%_w%=%_ww%^)
    echo %_dayofyear%. Tag des Jahres in der KW %_cwy%
    if %_leapyear% EQU 1 (
      echo Das Jahr %_yyyy% ist ein Schaltjahr
    ) ELSE (
      echo Das Jahr %_yyyy% ist kein Schaltjahr
    )
  ) ELSE (
    echo The %_mm%/%_dd%/%_cent%%_yy% is a %_www% ^(%_w%=%_ww%^) 
    echo %_dayofyear%. day of the year, calender week %_cwy%   
    if %_leapyear% EQU 1 (
      echo The Year %_yyyy% is a leap year
    ) ELSE (
      echo The Year %_yyyy% is no leap year
    )
  )
  echo.
  EXIT /b
 
:weekday_def_leapyear
  setlocal
  set _leapyear=0
  set /a _l0=%_yyyy% / 4
  set /a _l1=%_yyyy% - (%_l0% * 4)
  set /a _l0=%_yyyy% / 100
  set /a _l2=%_yyyy% - (%_l0% * 100)
  set /a _l0=%_yyyy% / 400
  set /a _l3=%_yyyy% - (%_l0% * 400)
 
  if %_l1% EQU 0 set _leapyear=1
  if %_leapyear% EQU 1 if %_l2% EQU 0 set _leapyear=0
  if %_l3% EQU 0 set _leapyear=1
 
  endlocal & set _leapyear=%_leapyear%
  EXIT /b
 
:weekday_def_daysb4
  REM daysb4 = days before (Anzahl der Tage die in den vorherigen Monaten waren)
  if %_m% EQU 1 set _daysb4=0
  if %_m% EQU 2 set _daysb4=31
  if %_m% EQU 3 set /a _daysb4=31+28+%_leapyear%
  if %_m% EQU 4 set /a _daysb4=31+28+31+%_leapyear%
  if %_m% EQU 5 set /a _daysb4=31+28+31+30+%_leapyear%
  if %_m% EQU 6 set /a _daysb4=31+28+31+30+31+%_leapyear%
  if %_m% EQU 7 set /a _daysb4=31+28+31+30+31+30+%_leapyear%
  if %_m% EQU 8 set /a _daysb4=31+28+31+30+31+30+31+%_leapyear%
  if %_m% EQU 9 set /a _daysb4=31+28+31+30+31+30+31+31+%_leapyear%
  if %_m% EQU 10 set /a _daysb4=31+28+31+30+31+30+31+31+30+%_leapyear%
  if %_m% EQU 11 set /a _daysb4=31+28+31+30+31+30+31+31+30+31+%_leapyear%
  if %_m% EQU 12 set /a _daysb4=31+28+31+30+31+30+31+31+30+31+30+%_leapyear%
  set /a _dayofyear=%_d% + %_daysb4%
  EXIT /b
 
:weekday_def_cwy
  REM cw = calender week (Kalenderwoche)
  setlocal
  set _wx=%_w%
  set _mm=1
  set _dd=4
 
  call :weekday_set_month_value
  call :weekday_set_year_value
  call :weekday_calc_weekday
  set /a _last_monday=%_wx% - 1
  set /a _cw=((7 + 3 - %_last_monday% + (%_dayofyear% - 1) ) / 7 )
  if %_cw% EQU 0 set /a _yyyy=%_yyyy%-1
  if %_cw% EQU 0 call :weekday_def_leapyear
  if %_cw% EQU 0 set /a _cw=((365 + %_leapyear% + 7 + 3 - %_last_monday% + (%_dayofyear% - 1) ) / 7 )
 
  endlocal & set _cw=%_cw%& set _cy=%_yyyy%
  
  REM if Calender week is 53 check if the day is in the first week of the new year
  REM Rule: Begin or end the year with a Thursday the year have 53 weeks
  REM if Day is week 53 and Day is 1,2 or 3 than week is 1st of the next year
  Rem cwoy = calender weeks of year
  Rem cwny = calender week new year
 
  if %_cw% EQU 53 (
      set _cwoy=53
    ) ELSE (
      set _cwoy=52
    )
  if %_cwoy% EQU 53 call :weekday_check_if_year_begin_with_thu
  if %_cw% EQU 53 if %_cwoy% EQU 52 if %_w% LEQ 3 (
    call :weekday_calc_new_cwy
  ) ELSE (
    set _cwy=%_yyyy%
  )
 
  EXIT /b
 
:weekday_calc_new_cwy
    set _cw=1
    set /a _cwny=%_yyyy%+1
  EXIT /b
 
:weekday_check_if_year_begin_with_thu
  REM check if year begins with a Thursday
  setlocal
  set _mm=1
  set _dd=1
  call :weekday_set_month_value
  call :weekday_set_year_value
  call :weekday_calc_weekday
  if not %_w% EQU 4 call :weekday_check_if_year_ends_with_thu
  endlocal & set _cwoy=%_cwoy%
  EXIT /b
 
:weekday_check_if_year_ends_with_thu
  REM check if year ends with a Thursday
  setlocal
  set _mm=12
  set _dd=31
  call :weekday_set_month_value
  call :weekday_set_year_value
  call :weekday_calc_weekday
  if not %_w% EQU 4 set _cwoy=52
  endlocal & set _cwoy=%_cwoy%
  EXIT /b
  
REM ############################################################################
 
:jdate JD DateStr -- converts a date string to julian day number with respect to regional date format
  ::                -- JD      [out,opt] - julian days
  ::                -- DateStr [in,opt]  - date string, e.g. "03/31/2006" or "Fri 03/31/2006" or "31.3.2006"
  :$source http://www.dostips.com
  :: modified for german windows and weekday by Mark Wolfgruber
  SETLOCAL
  set TT=0 & set DD=0 & set MM=0 & set JJ=0 & set YY=0
  set DateStr=%~2&if "%~2"=="" set DateStr=%date%
  for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('"echo.|date"') do (
      for /f "tokens=1-3 delims=/.- " %%A in ("%DateStr:* =%") do (
          set %%a=%%A&set %%b=%%B&set %%c=%%C))
  set /a dd=%TT%+%DD%, yy=%JJ%+%YY% 
  set /a "yy=10000%yy% %%10000,mm=100%mm% %% 100,dd=100%dd% %% 100"
rem  if %yy% LSS 100 set /a yy+=2000 &rem Adds 2000 to two digit years
 
  call :weekday_check_year yy %yy%
 
  set /a JD=dd-32075+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4
 
  ENDLOCAL & IF "%~1" NEQ "" (SET %~1=%JD%) ELSE (echo.%JD%)
  EXIT /b
 
:jdate2date JD YYYY MM DD -- converts julian days to gregorian date format
  ::                     -- JD   [in]  - julian days
  ::                     -- YYYY [out] - gregorian year, i.e. 2006
  ::                     -- MM   [out] - gregorian month, i.e. 12 for december
  ::                     -- DD   [out] - gregorian day, i.e. 31
  :$source http://www.dostips.com
  SETLOCAL ENABLEDELAYEDEXPANSION
  set /a L= %~1+68569,     N= 4*L/146097, L= L-(146097*N+3)/4, I= 4000*(L+1)/1461001
  set /a L= L-1461*I/4+31, J= 80*L/2447,  K= L-2447*J/80,      L= J/11
  set /a J= J+2-12*L,      I= 100*(N-49)+I+L
  set /a YYYY= I,  MM=100+J,  DD=100+K
  set MM=%MM:~-2%
  set DD=%DD:~-2%
  ( ENDLOCAL & REM RETURN VALUES
      IF "%~2" NEQ "" (SET %~2=%YYYY%) ELSE echo.%YYYY%
      IF "%~3" NEQ "" (SET %~3=%MM%) ELSE echo.%MM%
      IF "%~4" NEQ "" (SET %~4=%DD%) ELSE echo.%DD%
  )
  EXIT /b
  
REM ############################################################################
 
:weekday_help
  set _helpfile=%_thisfile%.help.txt
  echo. > %_helpfile% || set _helpfile=%tmp%\%_thisfile%.help.txt
  echo. > %_helpfile% || set _helpfile=^^^&2
  echo Help: %_thisfile% >> %_helpfile%
  echo created by Mark Wolfgruber (600infos.de) >> %_helpfile%
  echo i advice to copy the script to "%ProgramFiles%\scripts\date\" >> %_helpfile%
  echo or better to your systempath e.g. in %%SystemRoot%%="%SystemRoot%\" >> %_helpfile%
  echo. >> %_helpfile%
  echo calculates the day of a week, calender week, leap year, day of year >> %_helpfile%
  echo and export this into set enviroment variables >> %_helpfile%
  echo Weekdays are 1=Monday, 7=Sunday >> %_helpfile%
  echo You can use the german (dd.mm.yyyy) or english (mm/dd/yyyy) date format >> %_helpfile%
  echo the year  >> %_helpfile%
  echo. >> %_helpfile%
  echo FORMAT: %_thisfile% [Date] >> %_helpfile%
  echo starting without option the script will ask for a date >> %_helpfile%
  echo. >> %_helpfile%
  echo this Help: %_thisfile% /help >> %_helpfile%
  echo. >> %_helpfile%
  echo INFO: >> %_helpfile%
  echo (i'm searching for a good translation) >> %_helpfile%
  echo zweistellige Jahreszahlen 31-99 werden als 1931-1999 interprediert >> %_helpfile%
  echo ein- bzw. zweistellige Jahreszahlen 0-30 werden als 2000-2030 interprediert  >> %_helpfile%
  echo wird keine Jahreszahl angegeben wird das aktuelle Jahr verwendet >> %_helpfile%
  echo wird kein Monat oder 0 angegeben wird das aktuelle Monat verwendet >> %_helpfile%
  echo wird kein Tag oder 0 angegeben wird der aktuelle Tag verwendet  >> %_helpfile%
  echo wird nur 0 angegeben wird das aktuelle Datum verwendet  >> %_helpfile%
  echo julian day number - works only between 1801 and 2099    >> %_helpfile%
  echo z.Zt. findet keine Pruefung auf unplausible Tage statt >> %_helpfile%
  echo. >> %_helpfile%
  echo Beispiele/Examples: >> %_helpfile%
  echo    1. des Monats: %_thisfile% 1. >> %_helpfile%
  echo    1st of the Month: %_thisfile% 0/1 >> %_helpfile%
  echo    Heute/Today: %_thisfile% %%date%% >> %_helpfile%
  echo    or %_thisfile% 0 >> %_helpfile%
  echo. >> %_helpfile%
  echo Example: weekday.cmd 17.03.09 >> %_helpfile%
  echo Output in SET Variables: >> %_helpfile%
  echo    _cw=12                         # calenderweek number >> %_helpfile%
  echo    _cww=12                        # calenderweek with leading 0 if less than 10 >> %_helpfile%
  echo    _cwwy=12/2009                  # calenderweek and year of calenderweek,  >> %_helpfile%
  echo                                   # ... with leading 0 if less than 10 >> %_helpfile%
  echo    _cwy=12/2009                   # calenderweek and year of calenderweek >> %_helpfile%
  echo    _cwyw=2009_12                  # year of calenderweek and calenderweek >> %_helpfile%
  echo    _cy=2009                       # calenderweek and year of calenderweek >> %_helpfile%
  echo    _d=17                          # day of the month, number >> %_helpfile%
  echo    _date=2009-03-17               # date in the Form YYYY-MM-DD >> %_helpfile%
  echo    _dayofyear=76                  # day of the year number >> %_helpfile%
  echo    _dd=17                         # day of the month, with leading 0 if less than 10 >> %_helpfile%
  echo    _jd=2454908                    # julian day number >> %_helpfile%
  echo    _language_output=de            # language output, de or en >> %_helpfile%
  echo    _leapyear=0                    # if the year is a leapyear this var is 1 else 0 >> %_helpfile%
  echo    _longdate=Dienstag, 17.03.2009 # Date in a long form, WWW, DD.MM.YYYY >> %_helpfile%
  echo    _m=3                           # month number >> %_helpfile%
  echo    _mm=03                         # month, with leading 0 if less than 10 >> %_helpfile%
  echo    _w=2                           # number of day in the week, 1=Monday, 7=Sunday  >> %_helpfile%
  echo    _ww=Di                         # weekday, shortform Mo,Di,Mi,Do,Fr,Sa,So >> %_helpfile%
  echo    _www=Dienstag                  # weekday, longform >> %_helpfile%
  echo    _cent=20                       # Century >> %_helpfile%
  echo    _y=9                           # Year, number >> %_helpfile%
  echo    _yy=09                         # Year, 2 digits with leading 0 if less than 10>> %_helpfile%
  echo    _yyyy=2009                     # Year, 4 digit number >> %_helpfile%
 
  echo. >> %_helpfile%
  echo this helpfile: %_helpfile% >> %_helpfile%
  if not "%_helpfile%"=="^&2" if exist %_helpfile% more %_helpfile%
  endlocal
  goto weekday_end
 
 
:weekday_clear_vars
  endlocal
  set _cent=
  set _cw=
  set _cww=
  set _cwwy=
  set _cwy=
  set _cy=
  set _cwyw=
  set _d=
  set _date=
  set _dayofyear=
  set _dd=
  set _jd=
  set _language_output=
  set _leapyear=
  set _longdate=
  set _m=
  set _mm=
  set _w=
  set _ww=
  set _www=
  set _y=
  set _yy=
  set _yyyy=
  goto weekday_end
 
:weekday_end
 EXIT /b
 
REM ############################################################################
REM ############################ END OF WEEKDAY ################################
REM ############################################################################
 
:end
  REM END OF FILE
  REM EXIT 0
 rem pause

Help

weekday.cmd.help.txt
 
Help: weekday.cmd 
created by Mark Wolfgruber (600infos.de) 
i advice to copy the script to "C:\Programme\scripts\date\" 
or better to your systempath e.g. in %SystemRoot%="C:\WINDOWS\" 
 
calculates the day of a week, calender week, leap year, day of year 
and export this into set enviroment variables 
Weekdays are 1=Monday, 7=Sunday 
You can use the german (dd.mm.yyyy) or english (mm/dd/yyyy) date format 
the year  
 
FORMAT: weekday.cmd [Date] 
starting without option the script will ask for a date 
 
this Help: weekday.cmd /help 
 
INFO: 
(i'm searching for a good translation) 
zweistellige Jahreszahlen 31-99 werden als 1931-1999 interprediert 
ein- bzw. zweistellige Jahreszahlen 0-30 werden als 2000-2030 interprediert  
wird keine Jahreszahl angegeben wird das aktuelle Jahr verwendet 
wird kein Monat oder 0 angegeben wird das aktuelle Monat verwendet 
wird kein Tag oder 0 angegeben wird der aktuelle Tag verwendet  
wird nur 0 angegeben wird das aktuelle Datum verwendet  
julian day number - works only between 1801 and 2099    
z.Zt. findet keine Pruefung auf unplausible Tage statt 
 
Beispiele/Examples: 
   1. des Monats: weekday.cmd 1. 
   1st of the Month: weekday.cmd 0/1 
   Heute/Today: weekday.cmd %date% 
   or weekday.cmd 0 
 
Example: weekday.cmd 17.03.09 
Output in SET Variables: 
   _cw=12                         # calenderweek number 
   _cww=12                        # calenderweek with leading 0 if less than 10 
   _cwwy=12/2009                  # calenderweek and year of calenderweek,  
                                  # ... with leading 0 if less than 10 
   _cwy=12/2009                   # calenderweek and year of calenderweek 
   _cwyw=2009_12                  # year of calenderweek and calenderweek 
   _cy=2009                       # calenderweek and year of calenderweek 
   _d=17                          # day of the month, number 
   _date=2009-03-17               # date in the Form YYYY-MM-DD 
   _dayofyear=76                  # day of the year number 
   _dd=17                         # day of the month, with leading 0 if less than 10 
   _jd=2454908                    # julian day number 
   _language_output=de            # language output, de or en 
   _leapyear=0                    # if the year is a leapyear this var is 1 else 0 
   _longdate=Dienstag, 17.03.2009 # Date in a long form, WWW, DD.MM.YYYY 
   _m=3                           # month number 
   _mm=03                         # month, with leading 0 if less than 10 
   _w=2                           # number of day in the week, 1=Monday, 7=Sunday  
   _ww=Di                         # weekday, shortform Mo,Di,Mi,Do,Fr,Sa,So 
   _www=Dienstag                  # weekday, longform 
   _cent=20                       # Century 
   _y=9                           # Year, number 
   _yy=09                         # Year, 2 digits with leading 0 if less than 10
   _yyyy=2009                     # Year, 4 digit number 
 
this helpfile: weekday.cmd.help.txt

Translate
Advertisment
  • more about Pichat on http://www.pichat.net
  • C4 - Tiny chat software
  • http://600infos.de
  •    Counter:  11683  Online:  6  Your IP:  38.107.179.236  DNS:  unknown  Page generated in    0.21 sec.