יחידה:תאריך
מראה
יחידה זו מיועדת לביצוע פעולות נפוצות על תאריכים.
- #חשב - מקבלת תאריך טקסטואלי ופורמט ומחלצת את מהתאריך את הפורמט הרצוי
- #חשב טווח - מקבלת טווח תאריכים ומחשבת את ההפרש ביניהם
חשב
| פורמט | דוגמה | תוצאה |
|---|---|---|
| יום | {{#invoke:תאריך|חשב|[[3 בפברואר]] [[2013]]|יום}} | 3 |
| יום | {{#invoke:תאריך|חשב|[[3 בפברואר]] [[2013]]{{הערה|א}}|יום}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| חודש | {{#invoke:תאריך|חשב|[[3 בפברואר]] [[2013]]|חודש}} | 2 |
| שנה | {{#invoke:תאריך|חשב|[[3 בפברואר]] [[2013]]|שנה}} | 2013 |
| שנה | {{#invoke:תאריך|חשב|[[פברואר]] [[2013]]|שנה}} | 2013 |
| TS | {{#invoke:תאריך|חשב|[[3 בפברואר]] [[2013]]|TS}} | 2013-2-3 |
הערות:
- פורמט TS ניתן להעביר לפונקציות זמן של הוראות תנאי.
- ההמרה מתעלמת מסוגריים מרובעות של קישורים
- ניתן להוסיף פרמטר error והתוכן שלו יוצג במקרה של שגיאה בתאריך. (רצוי להכניס במקרה כזה את הדף לקטגוריה כלשהי שתאפשר מעקב אחרי דפים לא תקינים. ברירת המחדל היא קטגוריה:דפים עם שגיאות בתאריך)
חשב טווח
| דוגמה | תוצאה | |
|---|---|---|
| פורמט ברירת מחדל: אוטומטי | {{#invoke:תאריך|חשב טווח|[[3 בפברואר]] [[1947]] - [[15 בספטמבר]] [[2013]]}} | 66 שנים וגם 224 ימים |
| פורמט ברירת מחדל: אוטומטי (דוגמה עם שנים וסימן מינוס) | {{#invoke:תאריך|חשב טווח|1947 - 2013}} | 66 שנים |
| פורמט ברירת מחדל: אוטומטי (דוגמה עם שנים וסימן קו מפריד) | {{#invoke:תאריך|חשב טווח|1947–2013}} | שגיאת תאריך: mw.lua:143: field 'year' missing in date table |
| שנים | {{#invoke:תאריך|חשב טווח|[[3 בפברואר]] [[1947]] - [[15 בספטמבר]] [[2013]]|שנים}} | 66 שנים |
| גיל | {{#invoke:תאריך|חשב טווח|1 במרץ 1922 - 4 בנובמבר 1995|גיל}} | 73 שנים וגם 248 ימים |
| גיל | {{#invoke:תאריך|חשב טווח|1 במרץ 1922{{הערה|ב}} - 4 בנובמבר 1995|גיל}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| גיל | {{#invoke:תאריך|חשב טווח|1 במרץ 1994{{הערה|ב}} - 4 בנובמבר 1995|גיל}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| גיל | {{#invoke:תאריך|חשב טווח|1 במרץ 1993{{הערה|ב}} - 4 בנובמבר 1995|גיל}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| מספר | {{#invoke:תאריך|חשב טווח|1 במרץ 1922 - 4 בנובמבר 1995|מספר}} | 73 שנים וגם 248 ימים |
| מספר | {{#invoke:תאריך|חשב טווח|1 במרץ 1922{{הערה|ב}} - 4 בנובמבר 1995|מספר}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| מספר | {{#invoke:תאריך|חשב טווח|1 במרץ 1994{{הערה|ב}} - 4 בנובמבר 1995|מספר}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| מספר | {{#invoke:תאריך|חשב טווח|1 במרץ 1993{{הערה|ב}} - 4 בנובמבר 1995|מספר}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| שנים לפנה"ס | {{#invoke:תאריך|חשב טווח|[[3 בפברואר]] 1900 לפנה"ס - [[15 בספטמבר]] [[2013]]|שנים}} | שגיאת תאריך: יחידה:תאריך:25: Unexpected format |
| ימים | {{#invoke:תאריך|חשב טווח|[[3 בפברואר]] [[1947]] - [[15 בספטמבר]] [[2013]]|ימים}} | 24,331 ימים |
| הפרש | {{#invoke:תאריך|חשב טווח|[[3 בפברואר]] [[1947]] - [[15 בספטמבר]] [[2013]]|הפרש}} | 66 שנים וגם 224 ימים |
| ללא תאריך יעד | {{#invoke:תאריך|חשב טווח|[[3 בפברואר]] [[1947]]|שנים}} | 79 שנים |
| לא כולל היום האחרון | {{#invoke:תאריך|חשב טווח|5 ביוני 1967 - 10 ביוני 1967}} | 5 ימים |
| כולל היום האחרון | {{#invoke:תאריך|חשב טווח|5 ביוני 1967 - 10 ביוני 1967|כולל=כן}} | 5 ימים |
| כולל היום האחרון | {{#invoke:תאריך|חשב טווח|14 ספטמבר 2014 - 14 ספטמבר 2014|כולל=כן}} | 0 ימים |
| שנה ויום | {{#invoke:תאריך|חשב טווח|14 ספטמבר 2014 - 15 ספטמבר 2015|כולל=כן}} | שנה |
הערות:
- כאשר לא ניתן תאריך יעד תאריך היעד נקבע כזמן הנוכחי
- הפרש - מציין את הפרש הזמנים בשניות וללא מילים. ניתן להשתמש בערך המוחזר בחלוקה מתאימה לקבלת יחידות זמן אחרות.
- ניתן להוסיף פרמטר כולל=כן, ואז נלקח בחשבון גם היום האחרון. כשמדובר על טווח זמן ארוך והפורמט נבחר אוטומטי או שמכיל שנים, מתקבלת תוצאה מקורבת.
- ניתן להוסיף פרמטר error והתוכן שלו יוצג במקרה של שגיאה בטווח התאריכים. (רצוי להכניס במקרה כזה את הדף לקטגוריה כלשהי שתאפשר מעקב אחרי דפים לא תקינים. ברירת המחדל היא קטגוריה:דפים עם שגיאות בתאריך)
- אם לא מצוין פורמט, הוא נבחר אוטומטית:
- עד ל-3 שבועות הוא מוצג בימים
- עד שנה הוא מוצג בימים ושבועות
- עד ל-10 שנים בשנים ושבועות
- מעבר לזה רק בשנים
בדיקות
דוגמאות לשימוש ביחידה ופלט לדוגמה מודגמים ביחידה:תאריך/בדיקות.
function parseStrDate(dateStr, dateType)
--local dateStr = frame.args[1]
--local dateType = frame.args[2]
local dates = {
['ינואר']= 1,
['פברואר']= 2,
['מרץ']= 3,
['אפריל']= 4,
['מאי']= 5,
['יוני']= 6,
['יולי']= 7,
['אוגוסט']= 8,
['ספטמבר']= 9,
['אוקטובר']= 10,
['נובמבר']= 11,
['דצמבר']= 12
}
dateStr = mw.ustring.gsub( dateStr, "[%[%]]", "" )
-- replace month names to numbers
for a in pairs(dates) do
dateStr = mw.ustring.gsub(dateStr, 'ב?'..a, dates[a])
end
-- if there are alhpabet chars return nil (unexpected character)
assert(not mw.ustring.find(dateStr, '%a'), "Unexpected format")
local parts = mw.text.split(dateStr,' ')
local res
if dateType == 'TS' then
for i, part in pairs(parts) do
if not res then
res=part
else
res=part..'-'..res
end
end
else
-- dmy date
if #parts==3 then
if dateType=='Y' then
res = tonumber(parts[3])
elseif dateType=='M' then
res = tonumber(parts[2])
assert(res<13 and res>0, "Month must be in range 1-12")
elseif dateType=='D' then
res = tonumber(parts[1])
assert(res<32 and res>0, "Day must be in range 1-31")
end
elseif #parts==2 then -- MY date
if dateType=='Y' then
res = tonumber(parts[2])
elseif dateType=='M' then
res = tonumber(parts[1])
assert(res<13 and res>0, "Month must be in range 1-12")
end
elseif #parts==1 then --Y date
if dateType=='Y' then
res = tonumber(parts[1])
end
else
error("Unexpected date format")
end
end
return res
end
function parseDateRange(dateRangeStr, diffFormat)
local parts = mw.text.split(dateRangeStr,' +- +')
assert(#parts==2 or #parts==1, "Date range expected format is from - to or from (e.g from - now)")
-- parse dates
local res1 = parseStrDate(parts[1], 'TS' )
local year1, month1, day1 = unpack(mw.text.split(res1, '-'))
--assign default value
month1 = month1 or 1
day1 = day1 or 1
local t1 = os.time({
year = year1,--year1,
month = month1,
day = day1
})
local t2
if #parts==2 then
local res2 = parseStrDate( parts[2], 'TS' )
local year2, month2, day2 = unpack(mw.text.split(res2, '-'))
month2 = month2 or 1
day2 = day2 or 1
t2 = os.time({
year = year2,
month = month2,
day = day2
})
else
t2 = os.time()
end
local lang = mw.getContentLanguage()
return lang:formatDuration(os.difftime (t2, t1), diffFormat)
end
function parseDateRangeSafe(frame)
local diffFormat = {'years', 'days'}
if frame.args[2] == 'ימים' then
diffFormat = {'days'}
elseif frame.args[2] == 'שנים' then
diffFormat = {'years'}
end
local success, res = pcall(parseDateRange, frame.args[1], diffFormat)
if success then
return res
else
return '<span class="scribunto-error">שגיאת תאריך: '..res..'</span>[[קטגוריה:דפים עם שגיאות טכניות]]'
end
end
function parseStrDateSafe(frame)
local dateType = frame.args[2]
if dateType =='שנה' then
dateType = 'Y'
elseif dateType=='חודש' then
dateType = 'M'
elseif dateType=='יום' then
dateType='D'
end
local success, res = pcall( parseStrDate, frame.args[1], dateType )
if success then
return res
else
return '<span class="scribunto-error">שגיאת תאריך: '..res..'</span>[[קטגוריה:דפים עם שגיאות טכניות]]'
end
end
return {
['חשב'] = parseStrDateSafe,
['חשב טווח'] = parseDateRangeSafe
}