עריכת הדף "
יחידה:תאריך עברי
"
קפיצה לניווט
קפיצה לחיפוש
אזהרה:
אינכם מחוברים לחשבון. כתובת ה־IP שלכם תוצג בפומבי אם תבצעו עריכות כלשהן. אם
תיכנסו לחשבון
או
תיצרו חשבון
, העריכות שלכם תיוחסנה לשם המשתמש שלכם ותקבלו גם יתרונות אחרים.
בדיקת אנטי־ספאם.
אין
למלא שדה זה!
mtable = {"ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר", } monthtable = { ["תשרי"] = 7, ["חשוון"] = 8, ["כסלו"] = 9, ["טבת"] = 10, ["שבט"] = 11, ["אדר א'"] = 12, ["אדר ב'"] = 13, ["אדר"] = 13, ["ניסן"] = 1, ["אייר"] = 2, ["סיוון"] = 3, ["תמוז"] = 4, ["אב"] = 5, ["אלול"] = 6, } typomonthtable = {["חשון"] = "חשוון", ["כסליו"] = "כסלו", ["חשון"] = "חשוון", ["סיון"] = "סיוון", ["מרחשון"] = "חשוון", ["מרחשוון"] = "חשוון", ["מר-חשוון"] = "חשוון", ["מנחם אב"] = "אב", ["מנחם-אב"] = "אב", ["שבט (חודש)|שבט"] = "שבט", ["שבט (חודש)"] = "שבט" } lastletters = {["כ"] = "ך", ["מ"] = "ם", ["נ"] = "ן", ["פ"] = "ף", ["צ"] = "ץ"} function sub1(str, from, to) return mw.ustring.sub(str, from, to) end function find1(str, what, where) return mw.ustring.find(str, what, where, true) or 0 end function len1(s) if (s == nil) then return 0 end return mw.ustring.len(s) end function hebnum(s) numberstable = { ["א"] = 1, ["ב"] = 2, ["ג"] = 3, ["ד"] = 4, ["ה"] = 5, ["ו"] = 6, ["ז"] = 7, ["ח"] = 8, ["ט"] = 9, ["י"] = 10, ["כ"] = 20, ["ך"] = 20, ["ל"] = 30, ["מ"] = 40, ["ם"] = 40, ["נ"] = 50, ["ן"] = 50, ["ס"] = 60, ["ע"] = 70, ["פ"] = 80, ["ף"] = 80, ["צ"] = 90, ["ץ"] = 90, ["ק"] = 100, ["ר"] = 200, ["ש"] = 300, ["ת"] = 400, ["'"] = 0, ["\""] = 0,} local ans = 0 local str = s while len1(str) > 0 do ans = ans + numberstable[sub1(str, 1, 1)] str = sub1(str, 2, len1(str)) end return ans end function mindate(fix) local indenttable = {176, 206, 235, 265, 294, 324, 0, 30, 59, 88, 117, 147, 147} return same("28-08-" .. takeyear(fix[3]) .. " + " .. (indenttable[monthtable[sub1(fix[2], 2)]] + hebnum(fix[1]) - 1) .. " days") end function takeyear(year) local new if 0 < find1(year, "אלפים") then new = hebnum(sub1(year, 1, 2)) * 1000 else new = hebnum(sub1(year, 3, len1(year))) + 1000 * hebnum(sub1((year), 1, 2)) end return frame:callParserFunction("padleft", {new - 3761, 4}) end function exacttdate(hdate, mindate, format) local count = 0 local ans local greg while (count < 82) do ans = mindate .. " + " .. count .. " days" if (remove(from(ans)) == hdate) then greg = same(ans) local diffs = diff(greg) if diffs < 0 then diffs = 0 end greg = same(greg .. " - ".. diffs .. "days") checkcasp(greg) if makeformat then return frame:callParserFunction("#זמןמ:" .. makeformat, greg) end return format(greg) end count = count + 1 end error("Date not found", 0) end function exacttdate1(hyear) local wyear = frame:callParserFunction("padleft", {hebnum(sub1(hyear, 3, len1(hyear))) + 1000 * hebnum(sub1(hyear, 1, 2)) - 3761, 4}) checkcasp("01-01-" .. wyear) return wyear .. "-" .. frame:callParserFunction("padleft", {wyear + 1, 4}) end function opposite(gdate, format) if samesame == true then samesame = false return format(gdate) end end function from(gdate) local ans = opposite(gdate, to) if ans ~= nil then return ans end if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:xhxjj xjx", gdate) .. "]] [[" .. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end return frame:callParserFunction("#זמןמ:xhxjj xjx xhxjY", gdate) end function frommonth(gdate) local ans = opposite(gdate, tomonth) if ans ~= nil then return ans end if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:xjF", gdate) .. "]] [[" .. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end return frame:callParserFunction("#זמןמ:xjF xhxjY", gdate) end function fromonlymonth(gdate) local ans = opposite(gdate, toonlymonth) if ans ~= nil then return ans end if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:xjF", gdate) .. "]]" end return frame:callParserFunction("#זמןמ:xjF", gdate) end function fromyear(gdate) local ans = opposite(gdate, toyear) if ans ~= nil then return ans end if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:xhxjY", gdate) .. "]]" end return frame:callParserFunction("#זמןמ:xhxjY", gdate) end function same(gdate) return frame:callParserFunction("#זמןמ:d-m-Y", gdate) end function makeyear(gdate) local year = frame:callParserFunction("#זמןמ:Y", gdate) if tonumber(year) < 1000 and which then year = sub1(year, 2) end return year end function to(gdate) local year = makeyear(gdate) if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:j בF", gdate) .. "]] [[" .. year .. "]]" end return frame:callParserFunction("#זמןמ:j בF", gdate) .. " " .. year end function tomonth(gdate) local year = makeyear(gdate) if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:F", gdate) .. "]] [[" .. year .. "]]" end return frame:callParserFunction("#זמןמ:F", gdate) .. " " .. year end function toonlymonth(gdate) if frame.args["links"] == "yes" then return "[[" .. frame:callParserFunction("#זמןמ:F", gdate) .. "]]" end return frame:callParserFunction("#זמןמ:F", gdate) end function toyear(gdate) local year = makeyear(gdate) if frame.args["links"] == "yes" then return "[[" .. year .. "]]" end return year end function fixmonth(hdate) local point local max = 0 local place = 0 for m, mm in pairs(typomonthtable) do point = find1(hdate, m) if point > 0 and max < len1(m) then max = len1(m) place = m end end if max > 0 then point = find1(hdate, place) return sub1(hdate, 1, point - 1) .. typomonthtable[place] .. sub1(hdate, point + len1(place)) end return hdate end function fixdate(hdate1) local hdate = fixmonth(hdate1) if 1 == find1(hdate, "ראש חודש") then hdate = "א' ב" .. sub1(hdate, 10) end local h1, h2, h3 = parts(hdate) --[=[ local s1 = find1(hdate, " ") local s2 = find1(hdate, " ", s1 + 1) local s3 = find1(hdate, " ", s2 + 1) if (s3 > 0) then s2 = s3 end h1 = sub1(hdate, 1, s1 - 1) h2 = sub1(hdate, s1 + 1, s2 - 1) h3 = sub1(hdate, s2 + 1, len1(hdate)) ]=] if (len1(h3) > 1 and sub1(h3, 2, 2) ~= "'") then h3 = "ה'" .. h3 end --[=[ for m, mm in pairs(typomonthtable) do if h2 == "ב" .. m then h2 = "ב" .. mm end end ]=] for y, yy in pairs(lastletters) do if sub1(h3, len1(h3)) == y then h3 = sub1(h3, 1, len1(h3) - 1) .. yy end end return {h1, h2, h3, h1 .. " " .. h2 .. " " .. h3} end function fixerror(message) if message == "---" then return "" end return frame:preprocess(message) end function aserror(message) error(message .. "[[קטגוריה:דפים עם שגיאות בתאריך]]", 0) end function takenumbers(wdate) local s1 = find1(wdate, " ") local s2 = find1(wdate, " ", s1 + 1) local h1 = sub1(wdate, 1, s1 - 1) local h2 = sub1(wdate, s1 + 1, s2 - 1) local h3 = sub1(wdate, s2 + 1, len1(wdate)) for f, ff in pairs(mtable) do if "ב" .. ff == h2 then return h1 .. "-" .. frame:callParserFunction("padleft", {f, 2}) .. "-" .. frame:callParserFunction("padleft", {h3, 4}) end end end function numtonums(wdate) local s1 = find1(wdate, "-") local s2 = find1(wdate, "-", s1 + 1) return {tonumber(sub1(wdate, 1, s1 - 1)), tonumber(sub1(wdate, s1 + 1, s2 - 1)), tonumber(sub1(wdate, s2 + 1, len1(wdate)))} end function diff(gdate) local ans local wdate = numtonums(gdate) local wday = wdate[1] local wmonth = wdate[2] local wyear = wdate[3] if wyear > 1582 or (wyear == 1582 and (wmonth > 10 or (wmonth == 10 and wday > 14))) then ans = 0 else local ytable = {200, 300, 500, 600, 700, 900, 1000, 1100, 1300, 1400, 1500} ans = 10 if wmonth < 3 then wyear = wyear - 1 end for y, yy in pairs(ytable) do if yy > wyear then ans = ans - 1 end end end return ans end function remove(dateStr) -- Thanks to Eran dateStr = mw.ustring.gsub( dateStr, "[%[%]]", "" ) dateStr = mw.ustring.gsub(dateStr, "(\127UNIQ[^\127]+QINU\127)", "") dateStr = mw.ustring.gsub(dateStr, "‏","") dateStr = mw.ustring.gsub(dateStr, "‎","") return dateStr end function checkcasp(wdate) local wnumbers = numtonums(wdate) if wnumbers[3] < 360 or wnumbers[3] > 4357 or (wnumbers[3] == 1582 and wnumbers[2] == 10 and wnumbers[1] > 4 and wnumbers[1] < 15) then error("The date is not in the allowed casp", 0) end end function fromhebrewyear(hyear) ans = fromhebrewdate("א' בניסן " .. hyear, toyear) if frame.args["exact"] ~= "כן" then ans = ans .. "-" .. fromhebrewdate("א' בתשרי " .. hyear, toyear) end return ans end function fromhebrewmonth(hdate) if frame.args["exact"] == "כן" then return fromhebrewdate('ט"ו ב' .. hdate, tomonth) end local date1 = fromhebrewdate("א' ב" .. hdate, same) local month1 = toonlymonth(date1) local year1 = toyear(date1) local date2 = same(date1 .. " + 30 days") date2 = frommonth(date2) date2 = fromhebrewdate("א' ב" .. date2, same) date2 = same(date2 .. " - 1 days") local month2 = toonlymonth(date2) local year2 = toyear(date2) if year1 ~= year2 then return month1 .. " " .. year1 .. " - " .. month2 .. " " .. year2 elseif month1 ~= month2 then return month1 .. "-" .. month2 .. " " .. year1 else return month1 .. " " .. year1 end end function fromhebrewdate(rem, format) local fix = fixdate(remove(rem)) return exacttdate(fix[4], mindate(fix), format) end function fromhebrew1(hdate) local ht, rem = findhdatetype(fixmonth(hdate)) if ht == "dmy" then return ifwhich(fromhebrewdate(rem, to)) elseif ht == "my" then return ifwhich(fromhebrewmonth(rem)) elseif ht == "y" then return ifwhich(fromhebrewyear(rem)) else error("Wrong type: " .. ht, 0) end end function findhdatetype(hdate) local rem = mw.text.trim(remove(hdate)) local day, month, year = parts(hdate) if day ~= nil then return "dmy", rem end if month ~= nil then return "my", rem end return "y", rem --[=[ for m, mm in pairs(monthtable) do if find1(rem, m) == 1 then return "my", rem end end if find1(rem, " ") == 0 then return "y", rem end return "dmy", rem ]=] end function fromhebrew(f) which = true return fromhebrewandverify(f) end function fromhebrewformat(f) which = true makeformat = f.args["format"] return fromhebrewandverify(f) end function verify(f) frame = f which = false local success, res = pcall(pick1, frame.args[1], frame.args[2], "[[קטגוריה:חוסר מתאם בין תאריך עברי לתאריך לועזי]]") if not success then res = "" end local ans = "" if f.args[2] ~= "" then ans = tohebrew0(f.args[2]) end if f.args[1] ~= "" then ans = ans .. fromhebrewandverify(f) end return res .. ans end function fromhebrewandverify(f) frame = f local success, res = pcall(fromhebrew1, frame.args[1]) if success then return ifwhich(res) elseif frame.args["about"] == "כן" and frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = frame.args[1]}}) ~= "" then return ifwhich(frame.args[1], "[[קטגוריה:דפים עם תאריך עברי מקורב]]") elseif frame.args["error"] == nil then return aserror(res) end return fixerror(frame.args["error"]) end function tohebrewyear(gyear) ans = tohebrewnum("01-01-" .. gyear, fromyear) if frame.args["exact"] ~= "כן" then ans = ans .. "-" .. tohebrewnum("01-12-" .. gyear, fromyear) end return ifwhich(ans) end function tohebrewmonth(wdate) if frame.args["exact"] == "כן" then return tohebrewdate("15 ב" .. wdate, frommonth) end local date1 = tohebrewdate("1 ב" .. wdate, same) local month1 = fromonlymonth(date1) local year1 = fromyear(date1) local date2 = same(date1 .. " + 31 days") date2 = tomonth(date2) date2 = tohebrewdate("1 ב" .. date2, same) date2 = same(date2 .. " - 1 days") local month2 = fromonlymonth(date2) local year2 = fromyear(date2) if year1 ~= year2 then return ifwhich(month1 .. " " .. year1 .. " - " .. month2 .. " " .. year2) elseif month1 ~= month2 then return ifwhich(month1 .. "-" .. month2 .. " " .. year1) else return ifwhich(month1 .. " " .. year1) end end function tohebrewdate(rem, format) local s1 = find1(rem, " ") local s2 = find1(rem, " ", s1 + 1) if len1(rem) - s2 == 3 then rem = sub1(rem, 1, s2) .. "0" .. sub1(rem, s2 + 1) end local take = takenumbers(rem) if remove(to(take)) ~= rem then error("wrong date", 0) end checkcasp(take) take = same(take .. " + " .. diff(take) .. " days") return ifwhich(format(take)) end function tohebrewnum(wdate, format) if find1(wdate, "-", 3) == 3 and find1(wdate, "-", 6) == 6 and len1(wdate) == 9 then wdate = sub1(wdate, 1, 6) .. "0" .. sub1(wdate, 7, 9) end if same(wdate) ~= wdate then error("wrong date", 0) end checkcasp(wdate) wdate = same(wdate .. " + " .. diff(wdate) .. " days") return ifwhich(format(wdate)) end function findwdatetype(wdate) local rem = mw.text.trim(remove(wdate)) if find1(rem, "-") ~= 0 then return "num", rem end for m, mm in pairs(mtable) do if find1(rem, mm) == 1 then return "my", rem end end if tonumber(rem) ~= nil and tonumber(rem) .. "" == rem then return "y", rem end return "dmy", rem end function tohebrew1(wdate) local w, rem = findwdatetype(wdate) if w == "num" then return tohebrewnum(rem, from) elseif w == "dmy" then return tohebrewdate(rem, from) elseif w == "my" then return tohebrewmonth(rem) elseif w == "y" then return tohebrewyear(rem) else error("Wrong type: " .. ht, 0) end end function pick1(hdate, wdate, cat) local ht, wt, hrem, wrem, hdw, wdh, hsuccess, wsuccess, thsuccess, twsuccess if cat == nil then which = true ht, hrem = findhdatetype(hdate) wt, wrem = findwdatetype(wdate) else thsuccess, ht, hrem = pcall(findhdatetype, hdate) twsuccess, wt, wrem = pcall(findwdatetype, wdate) hsuccess = false wsuccess = false end if hrem == "" then ht = "empty" else hsuccess, hdw = pcall(fromhebrew1, hrem) if not hsuccess then ht = "about" end end if wrem == "" then wt = "empty" else wsuccess, wdh = pcall(tohebrew1, wrem) if not wsuccess then wt = "about" end end if cat ~= nil then if ht == "dmy" and wt ~= "dmy" then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך " .. frame.args["type"] .. " עברי מדויק]]" end if ht ~= "dmy" and wt == "dmy" then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך " .. frame.args["type"] .. " לועזי מדויק]]" end -- if ht == "dmy" or ht == "my" or ht == "y" -- then return "[[קטגוריה:חוסר מתאם בתאריכים - תאריך " -- .. frame.args["type"] .. " לועזי מדויק]]" end return "" end if wsuccess and hsuccess then if wt == "dmy" then return wdate elseif ht == "dmy" then return hdw elseif wt == "my" then return wdate elseif ht == "my" then return hdw elseif wt == "y" then return wdate else return hdw end elseif wsuccess then return wdate elseif hsuccess then return hdw elseif wt == "about" then return wdate else return hdate end end function checkcat(adate, cat) if cat == nil then return adate end return cat end function pick(f) frame = f local hebrew = frame.args["hebrew"] local world = frame.args["world"] local habout = false local wabout = false if frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = hebrew}}) ~= "" then hebrew = "" habout = true end if frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = world}}) ~= "" then world = "" wabout = true end local success, res = pcall(pick1, hebrew, world) if success then if habout and world == "" then return frame.args["hebrew"] end if wabout and hebrew == "" then return frame.args["world"] end return res elseif frame.args["error"] == nil then return aserror(res) end return fixerror(frame.args["error"]) end function tohebrew0(wdate) local success, res = pcall(tohebrew1, wdate) if success then return res elseif frame.args["about"] == "כן" and frame:expandTemplate({title = "גיל לערכי אישים/מקורב", args = {str = wdate}}) ~= "" then return ifwhich(frame.args[1], "[[קטגוריה:דפים עם תאריך מקורב]]") elseif frame.args["error"] == nil then return aserror(res) end return fixerror(frame.args["error"]) end function tohebrew(f) frame = f which = true return tohebrew0(frame.args[1]) end function samedate(f) frame = f which = true samesame = true return tohebrew0(frame.args[1]) end function ifwhich(ans, noans) if noans == nil then noans = "" end if which then return ans else return noans end end function parts(hdate) local funcs = { {function() return w[1] end}, {function() return w[2], w[1] end, function() return c(w[2], w[1]) end}, {function() return w[3], w[2], w[1] end, function() return c(w[3], w[2]), w[1] end, function() return w[3], c(w[2], w[1]) end}, {function() return w[4], c(w[3], w[2]), w[1] end, function() return c(w[4], w[3]), w[2], w[1] end, nil, function() return c(w[4], w[3]), c(w[2], w[1]) end}, {nil, function() return c(w[5], w[4]), c(w[3], w[2]), w[1] end}} function c(x, y) return y .. " " .. x end w = takewords(hdate) local code = 1 if 0 < find1(hdate, "אלפים") then code = code + 1 end if 1 == find1(hdate, "אדר א") then code = code + 2 end if 1 == find1(hdate, "אדר ב") then code = code + 2 end local year, month, day = funcs[#w][code]() return day, month, year end function takewords(str) local count = 1 local ans = {} local cur = str while find1(cur, " ") > 0 do ans[count] = sub1(cur, 1, find1(cur, " ") - 1) count = count + 1 cur = sub1(cur, find1(cur, " ") + 1) end ans[count] = cur return ans end return {fromhebrew = fromhebrew, tohebrew = tohebrew, verify = verify, pick = pick, samedate = samedate, fromhebrewformat = fromhebrewformat}
תקציר:
לתשומת ליבך: תרומתך לאתר חב"דציטוט תפורסם לפי תנאי הרישיון רישיון חופשי למסמכים של גנו גרסה 1.3 או חדשה יותר (אפשר לעיין בדף
חב"דציטוט:זכויות יוצרים
לפרטים נוספים). אם אינך רוצה שעבודתך תהיה זמינה לעריכה על־ידי אחרים, שתופץ לעיני כול, ושאחרים יוכלו להעתיק ממנה תוך ציון המקור – אין לפרסם אותה פה.
כמו־כן, שמירת העריכה משמעה הבטחה שכתבת את הטקסט הזה בעצמך או העתקת אותו ממקור בנחלת הכלל (שאינו מוגבל בזכויות יוצרים) או מקור חופשי דומה.
אין לשלוח חומר מוגבל בזכויות יוצרים ללא רשות!
ביטול
עזרה בעריכה
(נפתח בחלון חדש)
תבנית המופיעה בדף זה:
יחידה:תאריך עברי/תיעוד
(
עריכה
)
תפריט ניווט
כלים אישיים
לא בחשבון
שיחה
תרומות
יצירת חשבון
כניסה לחשבון
מרחבי שם
יחידה
שיחה
English
צפיות
קריאה
עריכת קוד מקור
גרסאות קודמות
עוד
ניווט
עמוד ראשי
שינויים אחרונים
אולם דיונים
דף ציטוט אקראי
אתרים נוספים
חב"דפדיה העברית
חב"דטקסט
כלים
דפים המקושרים לכאן
שינויים בדפים המקושרים
דפים מיוחדים
מידע על הדף