grails中的上次访问日期函数
我怎样才能发布一个功能,向用户显示某个人在网站上的最后一次访问?我在《Grails in Action》一书中写了一些方法,但它不能正常工作grails中的上次访问日期函数,grails,grails-2.0,Grails,Grails 2.0,我怎样才能发布一个功能,向用户显示某个人在网站上的最后一次访问?我在《Grails in Action》一书中写了一些方法,但它不能正常工作 static String getNiceDate(Date date) { def now = new Date() def diff = Math.abs(now.time - date.time) final long second = 1000 final long minute = second * 60
static String getNiceDate(Date date) {
def now = new Date()
def diff = Math.abs(now.time - date.time)
final long second = 1000
final long minute = second * 60
final long hour = minute * 60
final long day = hour * 24
def niceTime = ""
long calc = 0;
calc = Math.floor(diff/day)
if(calc) {
niceTime += calc + " day" + (calc > 1 ? "s " : " ")
diff %= day
}
calc = Math.floor(diff/hour)
if(calc){
niceTime += calc + " hour" + (calc > 1 ? "s " : " ")
diff %= hour
}
calc = Math.floor(diff/minute)
if(calc) {
niceTime =+ calc + " minute" + (calc > 1 ? "s " : " ")
diff %= minute
}
if(!niceTime) {
niceTime = "Right now"
} else {
niceTime += (date.time > now.time) ? "from now" : "ago"
}
return niceTime
}
这个代码有什么问题?每次都会显示20分钟前或10分钟前的内容,但用户的最后一次访问是在昨天。在注销功能中添加一个简单的行来记录当时的日期/时间。() 使用新日期()。 将其转换为您希望在java中使用的格式,并将其作为一个新字段记录在数据库(存储用户信息的任何位置)中。 当用户重新登录时检索此信息并显示它 这样试试:
/**
* Returns differnce b/w new Date and old date as Map holding difference in years, weeks, days, hrs, mins & secs
*/
public static Map getDiffernceInDates(Date oldDate, Date newDate = new Date()) {
Long difference = newDate.time - oldDate.time
Map diffMap =[:]
difference = difference / 1000
diffMap.seconds = difference % 60
difference = (difference - diffMap.seconds) / 60
diffMap.minutes = difference % 60
difference = (difference - diffMap.minutes) / 60
diffMap.hours = difference % 24
difference = (difference - diffMap.hours) / 24
diffMap.years = (difference / 365).toInteger()
if(diffMap.years)
difference = (difference) % 365
diffMap.days = difference % 7
diffMap.weeks = (difference - diffMap.days) / 7
return diffMap
}
详细显示日期差异的标记库如下所示:
def timeDiffInDetail = {attrs ->
Map diff = DateUtil.getDiffernceInDates(attrs.oldDate, attrs.newDate ?: new Date())
String result = diff.years ? diff.years + " years " : ""
result += diff.weeks ? diff.weeks + " weeks " : ""
result += diff.days ? diff.days + " days " : ""
result += diff.hours ? diff.hours + " hours " : ""
result += diff.minutes ? diff.minutes + " minutes ago" : ""
if (result)
out << result
else
out << " 0 minutes ago"
}
def timediffindeail={attrs->
Map diff=DateUtil.getDiffernceInDates(attrs.oldDate,attrs.newDate?:new Date())
字符串结果=差异年数?差异年数+“年数”:
结果+=差异周数?差异周数+“周数”:“
结果+=差异天数?差异天数+“天数”:
结果+=差异小时数?差异小时数+“小时数”:“
结果+=差异分钟数?差异分钟数+“分钟前”:
如果(结果)
out我对以前的代码做了一些更改,它工作得很好。如果有人需要,这是一个工作版本:
class LastVisitTagLib {
static namespace = "own"
def lastVisit = {attrs ->
def date = attrs.date
def niceDate = getNiceDate(date)
out << niceDate
}
static String getNiceDate(Date date) {
def now = new Date()
def diff = Math.abs(now.getTime() - date.getTime())
long second = 1000
long minute = 1000 * 60
long hour = minute * 60
long day = hour * 24
def niceTime = ""
long calc = 0L;
calc = Math.floor(diff / day)
if (calc > 0) {
niceTime += calc + " day" + (calc > 1 ? "s " : " ")
diff = diff % day
}
calc = Math.floor(diff / hour)
if (calc > 0) {
niceTime += calc + " hour" + (calc > 1 ? "s " : " ")
diff = diff % hour
}
calc = Math.floor(diff / minute)
if (calc > 0) {
niceTime += calc + " minute" + (calc > 1 ? "s " : " ")
diff = diff % minute
}
if (niceTime.length() == 0) {
niceTime = "Right now"
} else {
niceTime += (date.getTime() > now.getTime()) ? "from now" : "ago"
}
return niceTime
}
class LastVisitTagLib{
静态名称空间=“own”
def lastVisit={attrs->
def date=attrs.date
def niceDate=getNiceDate(日期)
输出(0){
niceTime+=计算+“天”+(计算>1?“s”:“”)
差异=差异%天
}
计算=数学楼层(差异/小时)
如果(计算>0){
niceTime+=计算+“小时”+(计算>1?“s”:“”)
差异=差异百分比小时
}
计算=数学楼层(差异/分钟)
如果(计算>0){
niceTime+=计算+“分钟”+(计算>1?“s”:“”)
差异=差异%分钟
}
if(niceTime.length()==0){
niceTime=“现在”
}否则{
niceTime+=(date.getTime()>now.getTime())?“从现在开始”:“以前”
}
返回时间
}
}
类标记的命名空间“own”
感谢所有为我提供帮助的人我做到了这一点,上次访问时间保存在db中,并在gap中从db中检索该时间。方法中的日期上次访问db的时间我不理解你的评论。如果你在数据库中正确保存了时间,那么在对他进行身份验证时检索该时间有什么问题?你没有这样做:.findBy.lastloggedInDate??我也不明白。这就是为什么我在这里问这个问题。例如,在db中,上次访问是17.07.2012 22.05.14,从昨天开始的这个时间,但当我今天12点查看他的个人资料时,例如,它显示我上次访问是30分钟前,而不是17小时前。我不明白为什么。也许在我的代码中你犯了一些错误吗?