יחידה:טווח זמנים
מראה
היחידה מיועדת לבנייה נוחה של תבניות עם טווחי זמנים.
טווח זמנים יהיה מהצורה של <תאריך התחלה> - <תאריך סיום> או <נקודת זמן>
הצגת משך זמן
כאשר עוסקים בפרט חשוב דיו לציון משך הזמן בין תאריך ההתחלה לסיום ניתן לציין "הצגת הפרשת זמנים=כן" שיחשב את משך הזמן מהתחלה לסיום או יסתמך על ויקינתונים לצורך זה. ניתן לציין בצורה מפורשת "משך" לציון ידני של משך הזמן.
דוגמאות שימוש
| פורמט | דוגמה | תוצאה | הערה |
|---|---|---|---|
| טווח פשוט | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=26 באוגוסט 2020|תאריך סיום=26 באוגוסט 2021}} | 26 באוגוסט 2020 – 26 באוגוסט 2021 | |
| אירוע פשוט | {{#invoke:טווח זמנים|טווח זמנים|נקודת זמן=26 באוגוסט 2020}} | 26 באוגוסט 2020 | |
| משך - פשוט יחד עם משך מפורש | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=26 באוגוסט 2020|תאריך סיום=26 באוגוסט 2021|הצגת הפרשת זמנים=כן|משך=שנה}} | 26 באוגוסט 2020 – 26 באוגוסט 2021 (שנה) | |
| הצגת הפרשת זמנים - פשוט יחד עם משך אוטומטי | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=26 באוגוסט 2020|תאריך סיום=26 באוגוסט 2021|הצגת הפרשת זמנים=כן}} | 26 באוגוסט 2020 – 26 באוגוסט 2021 (שנה) | |
| פשוט יחד עם משך אוטומטי (דוגמה נוספת) | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=10 בינואר 2005|תאריך סיום=23 בנובמבר 2005|הצגת הפרשת זמנים=כן}} | 10 בינואר 2005 – 23 בנובמבר 2005 (318 ימים) | |
| פורמט הצגה - כיצד להציג את משך הזמן | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=26 באוגוסט 2020|תאריך סיום=26 באוגוסט 2021|הצגת הפרשת זמנים=כן|פורמט הצגה=%s<br>%s}} | 26 באוגוסט 2020 – 26 באוגוסט 2021 (משך הזמן: שנה) |
|
| שימוש בוויקינתונים | {{#invoke:טווח זמנים|טווח זמנים}} | 1 בינואר 2011-2 בינואר 2012 | בהנחה שהוזנו הפרטים בוויקינתונים |
| תאריך התחלה-ויקינתונים, תאריך סיום-ויקינתונים - הגדרת המזהים אשר ימשכו מוויקינתונים | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה-ויקינתונים=P2031|תאריך סיום-ויקינתונים=P2032}} | 1 בינואר 2011-2 בינואר 2012 | בהנחה שהוזנו הפרטים בוויקינתונים |
| qid - הגדרת הדף בויקינתונים ממנו נמשכים התאריכים | {{#invoke:טווח זמנים|טווח זמנים|qid=Q27020128}} | 1 בינואר 2011-2 בינואר 2012 | בהנחה שהוזנו הפרטים בוויקינתונים. ניתן להזין |qid=- על מנת למנוע משיכה מוויקינתונים
|
| הווה (ציון אירוע מתמשך) | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=21 בינואר 2020|תאריך סיום=מכהנת|הצגת הפרשת זמנים=כן|הווה=מולך,מולכת,מכהן,מכהנת,לא כיהן,נוכחי,נוכחית,הווה,ואילך}} | 21 בינואר 2020 – מכהנת (6 שנים) | הווה מאפשר לציין שהאירוע לא הסתיים והוא נמשך בהווה, ומאפשר להכניס ערכים שונים אשר היחידה תקרא כהווה |
| נמשך - הגדרת ברירת מחדל של תאריך סיום כהווה | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=26 ביולי 2020|נמשך=כן|הצגת הפרשת זמנים=כן}} | 26 ביולי 2020 – הווה (5 שנים) | באם יוזן תאריך סיום היחידה תתחשב בו |
| טקסט התחלה - טקסט להציג במקרה שבו ידוע רק תאריך התחלה ולא תאריך סיום. | {{#invoke:טווח זמנים|טווח זמנים|תאריך התחלה=26 ביולי 2020|טקסט התחלה= מ-%s}} | מ-26 ביולי 2020 | |
| טקסט סיום - הצגת תאריך הסיום במקרה בו לא יוזן תאריך התחלה (במקום ברירת המחדל של ?) | {{#invoke:טווח זמנים|טווח זמנים|תאריך סיום=26 ביולי 2020|טקסט סיום= נגמר ב-%s}} | נגמר ב-26 ביולי 2020 |
local Date = require('Module:תאריך')
local Arguments = require("Module:Arguments")
local HebrewDate = require("Module:תאריך עברי")
local function convertDate(date)
local success, hebrewDate = pcall(HebrewDate.fromhebrew, mw.getCurrentFrame():newChild { args = { date } })
if success then
return hebrewDate
else
return date
end
end
local function render(frame)
local args = Arguments.getArgs(frame, {
['trim'] = true,
['removeBlanks'] = true
})
local res = ''
local dateFormat = ''
local maintainceCategory = ''
local entityId = args['qid']
if (entityId == '-' or entityId == '') then
entityId = nil
end
local pointInTime = args['נקודת זמן']
local startDate = args['תאריך התחלה']
local endDate = args['תאריך סיום']
local tempStart = startDate
local tempEnd = endDate
if startDate then
startDate = convertDate(startDate)
end
if endDate then
endDate = convertDate(endDate)
end
local wikidataStartDate = args['תאריך התחלה-ויקינתונים'] or 'P580'
local wikidataEndDate = args['תאריך סיום-ויקינתונים'] or 'P582'
local wikidataEndDateLimit = args['גבול תאריך סיום-ויקינתונים']
local showEditWikidata = true
-- text to show if we have only end date. Example: "Last even - %s" where %s is time. nil - will not show end date
local onlyEndDateText = args['טקסט סיום']
-- text to show if we have only start date. Example: "First even - %s" where %s is time. nil - will not show end date
local onlyStartDateText = args['טקסט התחלה']
local duration = args['משך'] -- P2047
-- Whether to show time diff between start and end day when applicable. Example: כן.
local showTimeDiff = args['הצגת הפרשת זמנים']
local dateRangeDiffFormat = args['פורמט הצגה'] or '%s (%s)'
local usingWikidata = false
-- Whether the event still continues. this will show <START>-present. Example: כן
local defaultOngoingEvent = args['נמשך'] == 'כן'
local ongoingEvent = defaultOngoingEvent
local endDateOngoingEvent = args['הווה']
local presentText = args['טקסט הווה']
local diffFormat = 'auto' -- TODO: better handling for different scales
if endDate ~= nil and endDate ~= '' then
if endDateOngoingEvent ~= nil then
-- set default ongoingEvent as false
ongoingEvent = false
for v in string.gmatch(endDateOngoingEvent, "[^,]+") do
if v:match('^%s*(.-)%s*$') == endDate then
-- set as true if end date specific that match endDateOngoingEvent
ongoingEvent = true
if presentText then
endDate = presentText
end
end
end
else
-- explicity end date was specified, hence it is not ongoing
ongoingEvent = false
end
end
-- simple case of single point in time
if pointInTime ~= nil or startDate == endDate then
if pointInTime == nil and startDate == endDate then
pointInTime = startDate
end
res = pointInTime
else -- date ranges
if startDate == nil and endDate ~= nil then
if onlyEndDateText == nil then
dateFormat = '%s–%s'
if mw.ustring.match(endDate, ' ') then
dateFormat = '%s – %s'
end
res = mw.ustring.format(dateFormat, '?', tempEnd)
else
res = mw.ustring.format(onlyEndDateText, tempEnd)
end
elseif startDate ~= nil and (endDate == nil or (ongoingEvent and endDate ~= nil)) then
if onlyStartDateText then
-- in corner cases where the start date is actually more complex text, avoid wrapping it
if mw.ustring.match(startDate, '.+\n.+') or mw.ustring.find(startDate, '<br />') ~= nil or
mw.ustring.match(startDate, '.+[•,].+') ~= nil then
res = startDate
else
res = mw.ustring.format(onlyStartDateText, tempStart)
end
else
if ongoingEvent then
dateFormat = '%s–%s'
if mw.ustring.match(startDate, ' ') or (endDate and mw.ustring.match(endDate, ' ')) then
dateFormat = '%s – %s'
end
res = mw.ustring.format(dateFormat, startDate, endDate or 'הווה')
-- try to fallback to automatic duration if duration is not available
if showTimeDiff == 'כן' and duration == nil then
local success, automaicDuration = pcall(Date.parseDateRange, startDate, diffFormat, true)
if success then
duration = automaicDuration
end
end
res = mw.ustring.format(dateFormat, tempStart, tempEnd or 'הווה')
else
res = startDate
end
end
elseif startDate ~= nil and endDate ~= nil then
dateFormat = '%s–%s'
if mw.ustring.match(startDate, ' ') or mw.ustring.match(endDate, ' ') then
dateFormat = '%s – %s'
end
res = mw.ustring.format(dateFormat, startDate, endDate)
if showTimeDiff == 'כן' and duration == nil then
local success, automaicDuration = pcall(Date.parseDateRange, res, diffFormat, true)
if success then
duration = automaicDuration
end
end
res = mw.ustring.format(dateFormat, tempStart, tempEnd)
end
end
-- append the duration
if showTimeDiff == 'כן' and duration ~= nil and duration ~= '' and res ~= nil then
res = mw.ustring.format(dateRangeDiffFormat, res, duration)
end
if showEditWikidata and usingWikidata and res ~= nil and res ~= '' and entityId ~= nil then
local link = mw.title.makeTitle(0, entityId, '', 'wikidata'):fullUrl('uselang=he')
res = res ..
mw.ustring
.format(
' [[File:Blue pencil RTL.svg|15px|link=%s|עריכת הנתון בוויקינתונים]]', link)
end
if maintainceCategory ~= nil and res ~= nil then
res = res .. maintainceCategory
end
return res
end
return {
['טווח זמנים'] = render
}