I think it will easier to use lubridate
which simplify a lot operation on POSIXt date and If you couple it to plyr
it's even more easier.
So here is my approach to this problem
require(lubridate)
require(plyr)
ddply(DF, .(month = month(DTime), staff), summarise, Sum = sum(value))
## month staff Sum
## 1 4 Bob 1
## 2 4 Mary 2
## 3 4 Sam 4
## 4 4 Sue 3
ddply(DF, .(week = week(DTime), staff), summarise, Sum = sum(value))
## week staff Sum
## 1 14 Sam 1
## 2 14 Sue 1
## 3 15 Mary 1
## 4 15 Sam 1
## 5 16 Bob 1
## 6 16 Sue 1
## 7 17 Sam 2
## 8 18 Mary 1
## 9 18 Sue 1