Date is mostly one day off and inconsistent

So, in summary, I want my dates to work in uniform. Since we are dealing with just dates and not time, how exactly can I achieve this? I have tried many ways already.
In the frontend, I am using React calendar for date UI and dayjs for date formating. In backend, I am using dayjs for formating as well. I built a web app where users can create trips. These trips heavily relies on date for operations such as trip starts and end dates, payment due dates, booking deadline dates, etc.
Let me use trip start and end date for example. All I want is that when user A creates a trip and set the start and end date to be September 1 – September 10 and publish the trip. No matter where the person who wants to book the trip is located, he or she should see the same date that the owner of the trip set for the start and end.
What I have now is frustrating. A very good example is this:
I setup a trip with the following dates:
start date: September 1, 2025
end date: September 10, 2025

On the booking page, I am seeing August 31, 2025.

I read that I should treat everything as UTC and save my dates as UTC in the database. I have done that or let me say, I think that I have done that. Here are the codes that I have.
In the frontend which is built with Nextjs, I am using React calendar. So, I created a component to handle this.

 import Calendar from "react-calendar";
 import "react-calendar/dist/Calendar.css";

export function CustomDatePicker(dates, dateStateFunc){

//this is the p tag that shows the date as the user select the dates from the calendar.
<div>
  <p>
    {dates === null || dates === undefined || !dates ? "Select Date"
     : dayjs(dates).format("YYYY-MM-DD")}
  </p>
</div>
}



<Calendar
  value={dates === undefined || dates === null || !dates ? dayjs(new Date()).toDate()
   : dayjs(dates).utc()?.format()}
    onChange={(e) =>dateStateFunc(e)}
  />

In one of the components where I used the date component, I handled it this way:
//trip creation component

import { CustomDatePicker } from "../customDate/CustomDate.component";


//I tried creating utc date from the dates that came from React Calender

const createNewDate = (date: Date | string)=>{
 let fullDate: Date | string;
  const m = dayjs(date).utc().format();

  fullDate = m;

  return fullDate;
}

 const handleDepositeDate = (datePara: Date | string, eventType) => {
    const fullDate = createNewDate(datePara as Date);
    if (eventType === "start_date") {
      setTripData({ ...tripsData, startDate: fullDate });
    } else if (eventType === "end_date") {
      setTripData({ ...tripsData, endDate: fullDate });
    }
  };

export function CreateTrip(){
 <CustomDatePicker
   dates={tripsData?.startDate as string}
   dateStateFunc={handleDepositeDate}
  />
}

With the above codes, when I console.log(tripData.startDate, tripData.endDate), I get to see UTC date like this: 2024-08-31T23:00:00Z, 2024-09-09T23:00:00Z.

This means it is one day off. This is what gets sent to the backend which creates the same date that is short of one day.
In my backend, I simply recreated the date since I want to trust only the backend. I don’t know if this is right or wrong. In the app, most of the dates are created by the user. So, in backend, I simply take what they have created, and recreate it before saving to the database to be sure that the right date format is saved in the database. My backend is in node.js

I was told to always use UTC midnight.

export const convertDate = (date: Date | string) => {
  const converted = dayjs(date).utc().utcOffset(0).startOf("day").format(); 
  return converted;
};

The above code also generates this date using the frontend September 1, 2025 and September 10, 2025: 2024-08-31T00:00:00Z and 2024-09-09T00:00:00Z;

So, why is it not generating date as I expected it to? My computer currently is set to UTC+01:00 west central Africa.
To display the date back in frontend, I am still using dayjs to handle it.

export const convertDate = (params: {
  date: Date | string;
  isFortmat?: boolean;
}) => {
  const { date, isFortmat } = params;
  let converted: string = "";

  isFortmat
    ? (converted = dayjs(date).utc().format("MMM-DD-YYYY"))
    : (converted = dayjs(date).utc().format());

  return converted;
};

It is still one day off with the current above date example.