#javascript #date-fns
#javascript #дата-fns
Вопрос:
В настоящее время я использую date-fns
серверную часть для добавления метаданных к определенным записям перед сохранением в БД:
function getDateFormat(serverMillisTimestamp) {
const current_unix = Math.round(serverMillisTimestamp / 1000)
return {
year: format(fromUnixTime(current_unix), 'yyyy').toString(),
monthOfYear: format(fromUnixTime(current_unix), 'MMMM')
.toString()
.toLowerCase(),
isoWeekOfYear: format(fromUnixTime(current_unix), 'II').toString(),
dayOfMonth: format(fromUnixTime(current_unix), 'dd').toString(),
isoDayOfWeek: format(fromUnixTime(current_unix), 'iiii')
.toString()
.toLowerCase()
}
}
однако на стороне клиента, когда я использую тот же код для генерации year, monthofYear, isoWeekOfYear, DayOfMonth и isoDayOfWeek, чтобы я мог запрашивать записи из базы данных, возникает несоответствие, поскольку формат использует часовой пояс locale для получения этих значений.
Как я могу использовать date-fns
, чтобы форматированные значения не зависели от часового пояса?
Комментарии:
1. Я думаю, вы не можете просто игнорировать часовой пояс. Вы должны использовать какой-то общий часовой пояс как для вашего сервера, так и для интерфейсного приложения, UTC или что-то в этом роде. Тогда проверьте документы здесь: date-fns.org/v2.16.1/docs/Time-Zones .
2. это имеет смысл. как именно я буду форматировать в часовой пояс UTC
Ответ №1:
Попробуйте что-то вроде этого:
import {format} from "date-fns";
import {utcToZonedTime} from "date-fns-tz";
function getDateFormat(serverMillisTimestamp) {
const utcTime = utcToZonedTime(serverMillisTimestamp, "UTC");
return {
year: format(utcTime, "yyyy").toString(),
monthOfYear: format(utcTime, "MMMM").toString().toLowerCase(),
isoWeekOfYear: format(utcTime, "II").toString(),
dayOfMonth: format(utcTime, "dd").toString(),
isoDayOfWeek: format(utcTime, "iiii").toString().toLowerCase(),
};
}
const date = new Date();
console.log(getDateFormat(date.getTime()));