使用"days ago"而不是日期



我目前正在开发一个discord bot,它向我显示ID、Name等用户信息,我添加了一个加入日期和一个帐户创建日期,它们运行良好,但我也想包含一个"几天前";而不是空白日期。

这是我的代码:

from unicodedata import name
import discord
from datetime import datetime
from discord.ext import commands
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='.',intents=intents)
@bot.event
async def on_ready():
print("Ready!")
@bot.command(name="user")
async def user(ctx,user:discord.Member=None):
if user==None:
user=ctx.author
rlist = []
for role in user.roles:
if role.name != "@everyone":
rlist.append(role.mention)
b = ','.join(rlist)

if rlist:
b = ','.join(rlist)
else:
b = "No roles"

embed = discord.Embed(colour=user.color,timestamp=ctx.message.created_at)
embed.set_author(name=f"User Info - {user}"),
embed.set_thumbnail(url=user.avatar.url),
embed.set_footer(text=f'Requested by - {ctx.author}',
icon_url=ctx.author.avatar.url)
embed.add_field(name='ID:' ,value=user.id,inline=False)
embed.add_field(name='Name:' ,value=user.display_name,inline=False)
embed.add_field(name='Created at:' ,value=datetime.strftime(user.created_at, "%#d/%m/%Y"), inline=False)
embed.add_field(name='Joined at:' ,value=datetime.strftime(user.joined_at, "%#d/%m/%Y"), inline=False)

embed.add_field(name='Bot?' ,value=user.bot,inline=False)
embed.add_field(name=f'Roles:({len(rlist)})',value=''.join([b]),inline=False)
embed.add_field(name='Top Role:' ,value=user.top_role.mention,inline=False)
await ctx.send(embed=embed)

我已经试过了

duration = dt.datetime.now() - user.joined_at 
hours, remainder = divmod(int(duration .total_seconds()), 3600)
minutes, seconds = divmod(remainder, 60)
days, hours = divmod(hours, 24)
await ctx.send(f"Joined before {days}d, {hours}h, {minutes}m, {seconds}s")

这个不起作用,我认为这与时区有关,我试图消除时区意识,但这对我也不起作用。

您可以这样做:

joined_at = user.joined_at.timestamp()
delta = int(datetime.utcnow().timestamp()) - int(joined_at)
hours, remainder = divmod(delta, 3600)
minutes, seconds = divmod(remainder, 60)
days, hours = divmod(hours, 24)

最新更新