Days between dates: Difference between revisions

→‎{{header|Wren}}: Now uses Wren-date module.
(→‎{{header|Wren}}: Now uses Wren-date module.)
Line 1,186:
 
=={{header|Wren}}==
{{libheader|Wren-date}}
No built-in date support so we need to work from scratch.
<lang ecmascript>import "/date" for Date
<lang javascript>var dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
 
var isLeapYear = Fn.new { |y|
return ((y % 4 == 0) && (y % 100!= 0)) || (y % 400 == 0)
}
 
// Parameters assumed to be in YYYY-MM-DD format.
var daysBetween = Fn.new { |date1, date2|
date1 = date1.replace("-", "")
date2 = date2.replace("-", "")
var neg = false
if (Num.fromString(date1) > Num.fromString(date2)) {
var temp = date2
date2 = date1
date1 = temp
neg = true
}
var y1 = Num.fromString(date1[0..3])
var m1 = Num.fromString(date1[4..5]) - 1
var d1 = Num.fromString(date1[6..7])
var y2 = Num.fromString(date2[0..3])
var m2 = Num.fromString(date2[4..5]) - 1
var d2 = Num.fromString(date2[6..7])
var days = 0
if (y1 == y2) {
days = dayOfYear[m2] - dayOfYear[m1] + d2 - d1
if (isLeapYear.call(y1) && m1 < 2 && m2 >= 2) days = days + 1
} else {
days = 365 - dayOfYear[m1] - d1
if (isLeapYear.call(y1) && m1 < 2) days = days + 1
days = days + dayOfYear[m2] + d2
if (isLeapYear.call(y2) && m2 > 1) days = days + 1
if (y1 < y2 - 1) {
for (y in y1+1..y2-1) {
days = days + 365
if (isLeapYear.call(y)) days = days + 1
}
}
}
return (neg) ? -days : days
}
 
var datePairs = [
Line 1,243 ⟶ 1,203:
]
for (dates in datePairs) {
var daysdate1 = daysBetweenDate.callparse(dates[0], dates[1])
System.print("Daysvar betweendate2 %(dates[0])= and %Date.parse(dates[1]) = %(days)")
var tempdays = (date2 - date1).days
Date.default = Date.isoDate
System.print("Days between %(date1) and %(date2) = %(days)")
}</lang>
 
9,490

edits