Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:DafYomi

From Wikipedia, the free encyclopedia

local p = {}

function p.today (frame)
	return fromDate(os.date("!*t"), frame.args.format)
end

function p.date (frame)
	return fromDate(frame.args, frame.args.format)
end

function fromDate (dat, format)
	local res = mas_daf(dat)
	-- add 1 to daf (no daf aleph)
	if (format) then
		return (string.gsub((string.gsub(format, "%%m", res.mas)), "%%d", res.daf + 1))
	else
		return "''" .. res.mas .. "'' " .. (res.daf + 1)
	end
end

function mas_daf (dat)
	dat.hour = 0
	dat.min = 0
	dat.sec = 0
	
	dat = os.time(dat)
	local date0 = os.time({year=2005,month=2,day=28,hour=0,min=0,sec=0}) -- date before start of cycle
	
	local sinceS = dat - date0 + 200 -- for the unlikely event of anti-leap seconds
	local sinceD = math.floor(sinceS / 86400)
	local days = sinceD % 2711
	
	if (days == 0) then return {mas='Niddah', daf='72'} end
	
	-- each number is the number of dapim, which is 1 less than the last daf's number
	
	if (days <= 63) then return {mas='Berakhot',daf=days} end
	days = days - 63
	if (days <= 156) then return {mas='Shabbat',daf=days} end
	days = days - 156
	if (days <= 104) then return {mas='Eruvin',daf=days} end
	days = days - 104
	if (days <= 120) then return {mas='Pesachim',daf=days} end
	days = days - 120
	if (days <= 21) then return {mas='Shekalim',daf=days} end
	days = days - 21
	if (days <= 87) then return {mas='Yoma',daf=days} end
	days = days - 87
	if (days <= 55) then return {mas='Sukkah',daf=days} end
	days = days - 55
	if (days <= 39) then return {mas='Beitza',daf=days} end
	days = days - 39
	if (days <= 34) then return {mas='Rosh Hashanah',daf=days} end
	days = days - 34
	if (days <= 30) then return {mas="Ta'anit",daf=days} end
	days = days - 30
	if (days <= 31) then return {mas='Megillah',daf=days} end
	days = days - 31
	if (days <= 28) then return {mas="Mo'ed Katan",daf=days} end
	days = days - 28
	if (days <= 27) then return {mas='Chagigah',daf=days} end
	days = days - 27
	if (days <= 121) then return {mas='Yevamot',daf=days} end
	days = days - 121
	if (days <= 111) then return {mas='Ketubot',daf=days} end
	days = days - 111
	if (days <= 90) then return {mas='Nedarim',daf=days} end
	days = days - 90
	if (days <= 65) then return {mas='Nazir',daf=days} end
	days = days - 65
	if (days <= 48) then return {mas='Sotah',daf=days} end
	days = days - 48
	if (days <= 89) then return {mas='Gittin',daf=days} end
	days = days - 89
	if (days <= 81) then return {mas='Kiddushin',daf=days} end
	days = days - 81
	if (days <= 118) then return {mas='Bava Kamma',daf=days} end
	days = days - 118
	if (days <= 118) then return {mas='Bava Metzia',daf=days} end
	days = days - 118
	if (days <= 175) then return {mas='Bava Batra',daf=days} end
	days = days - 175
	if (days <= 112) then return {mas='Sanhedrin',daf=days} end
	days = days - 112
	if (days <= 23) then return {mas='Makkot',daf=days} end
	days = days - 23
	if (days <= 48) then return {mas='Shevuot',daf=days} end
	days = days - 48
	if (days <= 75) then return {mas='Avodah Zarah',daf=days} end
	days = days - 75
	if (days <= 13) then return {mas='Horayot',daf=days} end
	days = days - 13
	if (days <= 119) then return {mas='Zevachim',daf=days} end
	days = days - 119
	if (days <= 109) then return {mas='Menachot',daf=days} end
	days = days - 109
	if (days <= 141) then return {mas='Chullin',daf=days} end
	days = days - 141
	if (days <= 60) then return {mas='Bekhorot',daf=days} end
	days = days - 60
	if (days <= 33) then return {mas='Arakhin',daf=days} end
	days = days - 33
	if (days <= 33) then return {mas='Temurah',daf=days} end
	days = days - 33
	if (days <= 27) then return {mas='Keritot',daf=days} end
	days = days - 27
	if (days <= 21) then return {mas="Me'ilah",daf=days} end -- these 4 tractates are numbered consecutively
	if (days <= 24) then return {mas='Kinnim',daf=days} end
	if (days <= 32) then return {mas='Tamid',daf=days} end
	if (days <= 36) then return {mas='Middot',daf=days} end
	days = days - 36
	return {mas='Niddah',daf=days}
end

return p