Date.st
changeset 5548 eead51e4752e
parent 5515 4adb4b3a7475
child 5662 c7f7c94bc5bc
--- a/Date.st	Sun Aug 20 16:23:32 2000 +0200
+++ b/Date.st	Mon Aug 21 15:26:29 2000 +0200
@@ -366,6 +366,30 @@
     "
 
     "Modified: 1.7.1996 / 15:20:16 / cg"
+!
+
+tomorrow
+    "return a date, representing tomorrow.
+     See also: Time now / AbsoluteTime now."
+
+    ^ Date today addDays:1
+
+    "
+     Date tomorrow 
+     Date tomorrow dayInWeek
+    "
+!
+
+yesterday
+    "return a date, representing yesterday.
+     See also: Time now / AbsoluteTime now."
+
+    ^ Date today subtractDays:1
+
+    "
+     Date yesterday 
+     Date yesterday dayInWeek
+    "
 ! !
 
 !Date class methodsFor:'general queries'!
@@ -605,6 +629,41 @@
     "
 !
 
+weekInYearOf:aDateOrTimestamp
+    "for a given date or timeStamp, return the week-number.
+     the returned week number starts at 1. Week nr. 1 includes
+     Jan, 1st of the dates year up to (and including) the sunday after that date.
+     i.e. each week is Mon .. Sun 
+     (that is: Sunday is treated as the last day of the week and
+      belongs to the previous week)"
+
+    |dayInYear dayInWeekOf1stJan daysIn1stWeek week|
+
+    dayInYear := aDateOrTimestamp dayInYear.
+    "/ what weekDay is 1st January of that year ?
+    dayInWeekOf1stJan := (AbsoluteTime newDay:1 year:(aDateOrTimestamp year)) dayInWeek.  "/ 1 for monday
+    "/ how many days left in that week ?
+    daysIn1stWeek := 7 - dayInWeekOf1stJan + 1.
+    dayInYear <= daysIn1stWeek ifTrue:[^ 1].
+    "/ compute the week 
+    week := (dayInYear - daysIn1stWeek - 1) // 7.
+    ^ week + 2
+
+    "
+     AbsoluteTime today weekInYear    
+     Date weekInYearOf:(AbsoluteTime newDay:1 year:2000)    was a saturday
+     Date weekInYearOf:(AbsoluteTime newDay:2 year:2000)    was a sunday
+     Date weekInYearOf:(AbsoluteTime newDay:3 year:2000)    was a monday
+     Date weekInYearOf:(AbsoluteTime newDay:4 year:2000)    was a tuesday
+     Date weekInYearOf:(AbsoluteTime newDay:5 year:2000)    was a wed
+     Date weekInYearOf:(AbsoluteTime newDay:6 year:2000)    was a thursday
+     Date weekInYearOf:(AbsoluteTime newDay:7 year:2000)    was a fri
+     Date weekInYearOf:(AbsoluteTime newDay:8 year:2000)    was a sat
+     Date weekInYearOf:(AbsoluteTime newDay:9 year:2000)    was a sun
+     Date weekInYearOf:(AbsoluteTime newDay:10 year:2000)   was a monday
+    "
+!
+
 yearAsDays: yearInteger
     "Returns the number of days since Jan 1, 1901. (GNU)
      to the first Jan of the year, yearInteger.
@@ -925,8 +984,12 @@
     ^ wday
 
     "
-     Date today dayInWeek 
+     Date today dayInWeek    
+     Date tomorrow dayInWeek 
+     Date yesterday dayInWeek 
      Date today weekday 
+     Date tomorrow weekday 
+     Date yesterday weekday 
      (Date day:15 month:4 year:1959) dayInWeek 
      (Date day:1 month:1 year:1901) dayInWeek 
      (Date day:31 month:12 year:1899) dayInWeek 
@@ -935,6 +998,19 @@
     "Modified: / 1.2.1998 / 14:10:27 / cg"
 !
 
+dayInYear
+    "return the day-nr within the year of the receiver - 1 .. 365/366"
+
+    ^ self asAbsoluteTime dayInYear
+
+    "
+     Date today dayInYear 
+     (Date newDay:1 year:1999) dayInYear
+     (Date newDay:1 year:2000) dayInYear
+     (Date newDay:2 year:2000) dayInYear
+    "
+!
+
 dayName
     "return the week-day of the receiver as a string.
      The returned string depends on the language setting.
@@ -1027,6 +1103,27 @@
     "
 !
 
+weekInYear
+    "return the week number of the receiver - 1 for Jan, 1st.
+     each week is Mon .. Sun (i.e. Sunday belongs to the previous week)"
+
+    ^ self class weekInYearOf:self
+
+    "
+     Date today weekInYear    
+     (Date newDay:1 year:2000) weekInYear   was a saturday
+     (Date newDay:2 year:2000) weekInYear   was a sunday
+     (Date newDay:3 year:2000) weekInYear   was a monday
+     (Date newDay:4 year:2000) weekInYear   was a tuesday
+     (Date newDay:5 year:2000) weekInYear   was a wed
+     (Date newDay:6 year:2000) weekInYear   was a thursday
+     (Date newDay:7 year:2000) weekInYear   was a fri
+     (Date newDay:8 year:2000) weekInYear   was a sat
+     (Date newDay:9 year:2000) weekInYear   was a sun
+     (Date newDay:10 year:2000) weekInYear  was a monday
+    "
+!
+
 weekday
     "return the week-day of the receiver as a string.
      The returned string depends on the language setting.
@@ -1409,6 +1506,6 @@
 !Date class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Date.st,v 1.52 2000-08-11 17:39:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Date.st,v 1.53 2000-08-21 13:26:29 cg Exp $'
 ! !
 Date initialize!