I'm working on my user info command and I've run into a problem, that when I display the time from someones joining the server, it sometimes shows the right hours, and sometimes not. I think it's caused by timezones. My code is right here:
const { DiscordAPIError } = require('discord.js');
const Discord = require('discord.js');
const moment = require('moment');
module.exports = {
name: 'profile',
description: 'The bot will return the info about the user',
execute(message, args) {
let userinfoget =
message.mentions.members.first() ||
message.guild.members.cache.get(args[0]) ||
message.member;
var isBot = 0;
if (userinfoget.user.bot) {
isBot = 'This account is a bot';
} else {
isBot = "This account isn't a bot";
}
var status = userinfoget.presence.status;
if (status == 'online') {
status = `<:statusonline:750346592242106368> This user is currently online`;
} else if (status == 'idle') {
status = `<:statusidle:750346522847215760> This user is currently idle`;
} else if (status == 'dnd') {
status = `<:statusdnd:750346486398582815> This user has currently do not disturb mode on`;
} else if (status == 'offline') {
status = `<:statusoffline:750346558809047090> This user is currently offline (or lurking <:lurklias:750342622463262751>)`;
} else {
status == `Unable to get user's status`;
}
var today = new Date();
var joinDate = new Date(userinfoget.joinedAt);
if (1 == 1) {
var yearsDiffServerJoin = today.getFullYear() - joinDate.getFullYear();
var monthsDiffServerJoin = today.getMonth() - joinDate.getMonth();
var daysDiffServerJoin = today.getDate() - joinDate.getDate();
if (
monthsDiffServerJoin < 0 ||
(monthsDiffServerJoin === 0 && daysDiffServerJoin < 0)
)
yearsDiffServerJoin--;
if (monthsDiffServerJoin < 0) monthsDiffServerJoin += 12;
if (daysDiffServerJoin < 0) {
var joinDateAux = joinDate.getDate();
joinDate.setMonth(joinDate.getMonth() + 1, 0);
daysDiffServerJoin = joinDate.getDate() - joinDateAux + today.getDate();
monthsDiffServerJoin--;
}
if (daysDiffServerJoin > 7) {
var weeksDiffServerJoin = (
(daysDiffServerJoin - (daysDiffServerJoin % 7)) /
7
).toFixed(0);
daysDiffServerJoin = daysDiffServerJoin - weeksDiffServerJoin * 7;
} else var weeksDiffServerJoin = 0;
var hoursDiffServerJoin = (
((today - joinDate) / (1000 * 60 * 60)) %
24
).toFixed(0);
console.log((today - joinDate) / (1000 * 60 * 60));
var minutesDiffServerJoin = (
((today - joinDate) / (1000 * 60)) %
60
).toFixed(0);
var secondsDiffServerJoin = (((today - joinDate) / 1000) % 60).toFixed(0);
console.log('hours, mins, secs');
console.log(hoursDiffServerJoin);
console.log(minutesDiffServerJoin);
console.log(secondsDiffServerJoin);
var result = [];
if (yearsDiffServerJoin > 0)
result.push(
yearsDiffServerJoin + (yearsDiffServerJoin > 1 ? ' years' : ' year')
);
if (monthsDiffServerJoin > 0)
result.push(
monthsDiffServerJoin + (monthsDiffServerJoin > 1 ? ' months' : ' month')
);
if (daysDiffServerJoin > 0)
result.push(
daysDiffServerJoin + (daysDiffServerJoin > 1 ? ' days' : ' day')
);
console.log(yearsDiffServerJoin);
console.log(monthsDiffServerJoin);
console.log(weeksDiffServerJoin);
console.log(daysDiffServerJoin);
var highestRoleID = userinfoget.roles.highest.id;
var joined = moment(userinfoget.joinedAt).format('DD/MM/YY, HH:mm:ss');
console.log(`Highest role = ${highestRoleID}`);
console.log(`User = ${userinfoget}`);
var joinDate = new Date(userinfoget.joinedAt);
var today = Date.now();
var timeFromJoiningServer = today - joinDate;
var yearsServer = (
timeFromJoiningServer /
(1000 * 60 * 60 * 24 * 365.25)
).toFixed(0);
var monthsServer;
console.log(yearsServer);
console.log(timeFromJoiningServer);
console.log(userinfoget.joinedAt);
const embed = new Discord.MessageEmbed()
.setColor(userinfoget.displayHexColor)
.setAuthor(`${userinfoget.user.tag}`, userinfoget.user.displayAvatarURL())
.addFields({ name: `User ping`, value: `<@${userinfoget.id}>` })
.addFields({ name: `User ID`, value: `${userinfoget.id}` })
.addFields(
{
name: 'Joined Server',
value:
moment(userinfoget.joinedAt).format('LLLL') +
' ' +
timeFromJoiningServerMessage,
} // or moment(userinfoget.joinedAt).format('DD/MM/YY, HH:mm:ss')
)
.addFields(
{
name: 'Joined Discord',
value: moment(userinfoget.user.createdAt).format('LLLL'),
} // or moment(userinfoget.createdAt).format('DD/MM/YY, HH:mm:ss')
)
.addFields({ name: 'Highest role', value: `<@&${highestRoleID}>` })
.addFields({ name: 'Online Status', value: `${status}` })
.addFields({ name: 'Is a bot?', value: `${isBot}` })
.setFooter('Bot made by mkpanda');
message.channel.send(embed);
}
},
};
Is there a way to fix it? I tried converting joinDate and today to UTC time (after getting the year, month, day and weeks difference) using .getUTCHours or .toUTCString, but the first caused hours, minutes and seconds always being 0, the second one caused it to be NaN. Thanks in advance :)