WeepingDogel/tinygallery

可自定义的时区显示

Closed this issue · 2 comments

用户应该可在profile决定自己是否公开时区,
并且可以设置自己的时区。(默认选项是浏览器提供的时区)

设置中选择是否显示为自己时区对应时间,否则使用评论者所在时区(如果公开),或者自己时区对应时间(如果不公开)。如果时区和自己时区不同,应该在时间后提示。

在 Vue 版本将会修复这个问题,

因为 Vue 版本做了前后端分离,前端可以对服务器时间进行换算

qwq

暂时没有使用自定义时区的方法,在新版本中,启用了自动检测浏览器和服务端的时区然后在前端进行转换的方法。
但不管怎么说应该也算解决了

前端将会做这些事

import { defineStore } from "pinia";
import axios from "axios";
import moment from "moment-timezone";

export const Timezone = defineStore(
    'TimeZone',
    {
        state: () => ({
            TimeZoneServer: '',
            TimeZoneBrowser: '' 
        }),
        actions: {
            GetTheTimeZoneOfServer(){
                axios.get('/userdata/get/timezone')
                .then(
                    (response) => {
                        // console.log(response);
                        this.TimeZoneServer = response.data;
                        console.log(this.TimeZoneServer);
                    }
                )
                .catch(
                    (error) => {
                        // console.log(error);
                        return error.detail;
                    }
                )
            },
            GetTheLocalTimeZone(){
                const TimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
                this.TimeZoneBrowser = TimeZone;
                console.log(this.TimeZoneBrowser);
            },
            CaculateTheCorrectDate(OriginalDate: String){
                const dateString = OriginalDate;
                return moment.tz(dateString, this.TimeZoneServer).clone().tz(this.TimeZoneBrowser).format('YYYY-MM-DD HH:mm');
            }
        }
    }
)

而后端将会做这些事

from tzlocal import get_localzone

@userdata_router.get("/get/timezone")
def get_server_timezone():
    tz = str(get_localzone())
    return tz