【发布时间】:2021-10-01 09:46:00
【问题描述】:
我正在尝试为游戏创建一个虚拟日历。 我有一些事件会在现实中持续一段时间(1 周,1 个月)。 在游戏中,这些事件应始终等于 1 年。
为了简单起见,我的目标是使用 date-fns 并使用时间戳来保持比率。
假设我有一个活动持续 1 周(现实生活) 在1年的游戏中。 如果我尝试在 活动开始 + 3 天 时获取游戏中的日期(几乎一半的活动过去了)。从理论上讲,我应该在虚拟日历中接近 6 个月,但是在测试它时会在几年后给我一个答案。
import {
addDays,
addYears,
getTime
} from "date-fns";
// Initiate Dates
const now = new Date()
const nextWeek = addDays(now, 7);
const nextYear = addYears(now, 1);
// Initiate Timestamp convertions
const currentTimestamp = getTime(now)
const tmrTimestamp = getTime(addDays(now, 3))
const nextWeekTimestamp = getTime(nextWeek)
// Calculate differences
const differenceReal = nextWeekTimestamp - currentTimestamp
const differenceVirtual = getTime(nextYear) - currentTimestamp
console.log(`difference_real : ${differenceReal}`)
console.log(`difference_virtual : ${differenceVirtual}`)
// Calculate the ratio
const ratio = differenceReal / differenceVirtual
// Log information
console.log(`ratio: ${ratio}`)
console.log(`ts_now ${getTime(now)}`)
console.log(`ts_tmr ${getTime(tmrTimestamp)}`)
//Calculate equivalence of day+1 on a year
const nextDayRatioed = tmrTimestamp / ratio
console.log(`ts_ratioed: ${Math.round(nextDayRatioed)}`)
console.log(`ts_next_year: ${getTime(nextYear)}`)
console.log(`next_year: ${nextYear.toLocaleString()}`)
console.log(`tmr_relative: ${new Date(Math.round(nextDayRatioed)).toLocaleString()}`)
输出:
我怎样才能让tmr_relative 成为正确的值,它或多或少是 2022 年 1 月
【问题讨论】:
标签: javascript typescript date-fns