2

登录到他们的帐户后,每个用户的登录日期和时间都会存储到数据库中。然而,我想做的是计算天数(或者如果大于一个月,最好转换为月数),这样如果用户查看他们的个人资料,他们就可以看到乐队的活跃程度。此外,这可以使我受益于将活动配置文件保持在网站内容议程的首位,这样它就不会因不活动的用户内容填满主页内容而变得陈旧。

我正在使用 ColdFusion,所以我正在寻找一种方法来查找例如多少天前#lastLogin#来自#now()#. 因此,假设上次登录的日期是 2013 年 4 月 23 日,而今天的日期是 2013 年 4 月 29 日,它将显示“上次活动,1 天前”。但是,如果上次登录是 2013 年 3 月 23 日,则会显示“上次活动,1 个月前”。

有人知道怎么做吗?谢谢。

PS我目前没有测试这个的代码,因为我不知道从哪里开始实现这个。

4

3 回答 3

8

使用 DateDiff

<cfset days = dateDiff("d", LoginDateVariable, now()) />

就这么简单。

于 2013-04-29T10:10:02.257 回答
2

PS我目前没有测试这个的代码,因为我不知道从哪里开始实现这个。

这并不能回答您的直接问题,但为了帮助您了解从哪里开始,我强烈建议您查看内置的 ColdFusion 功能和可供您使用的标签。

此外,Google 搜索通常会将您带到文档中,只需将“coldfusion”添加到您的搜索字符串中即可。在 google 中搜索冷融合日期函数会产生非常有用的答案,其中第一个是所有ColdFusion 日期函数的列表。

于 2013-04-29T16:45:49.723 回答
0

戴尔的回答很到位。但我也建议将其作为变量与您的查询一起返回。让 SQL 服务器完成这项工作。对于这些类型的计算,它非常有效。并不是说 CF 也不能把它们做好。但它可能更适合 SQL 来做这个提升。特别是如果您已经返回 lastLogin 日期。

这将类似于 CF 解决方案:

SELECT ...., lastLogin, DATEDIFF(d, lastLogin, GETDATE()) AS LastLoginDays 
FROM ....
WHERE ....

那会给你天数。如果您想按月/日划分月份,您必须决定如何定义月份。那会变得更复杂一些。您可以编写一个可以在两个日期运行的 SQL 函数,并为您提供自上次登录以来的准确天数/月数/年数。

要记住的另一件事:日期在哪里生成?当您将 loginDate 插入数据库时​​,您是在插入之前在 CF 中执行 now() 还是在插入时在 SQL 中执行 getDate()?同样,我会让数据库执行您的日期逻辑,但您希望比较来自同一来源的两个日期。例如,如果您的 loginDate 是数据库 getDate(),那么您可能不想将其与 CF now() 进行比较。一个按 SQL 服务器的日期时间,另一个按 CF 服务器的日期时间。它们可能不同。

于 2013-04-29T17:54:34.883 回答