import { View, Text } from "@tarojs/components";
import './MainCard.scss'
import { useState } from "react";
import { rpxToPx } from "@/utils/tools";
import Rings, { RingCommon, BgRing, TargetRing, CurrentDot } from "@/features/trackTimeDuration/components/Rings";
import dayjs from "dayjs";
import moment from 'moment-timezone'
import { MainColorType } from "@/context/themes/color";
export default function MainSleepActiveCard() {
const [isSleep, setIsSleep] = useState(true)
const [isSleepMode, setIsSleepMode] = useState(true)
const startScheduleTime = '19:00'
const endScheduleTime = '06:00'
function formatTime(format: string, timestamp?: number) {
return dayjs().format(format)
}
function switchMode() {
setIsSleepMode(!isSleepMode)
}
const common: RingCommon = {
useCase: 'ChooseScenario',
radius: 115,
lineWidth: 26,
isFast: true,
status: 'WAIT_FOR_START'
}
const bgRing: BgRing = {
color: '#EAE9E9'
}
function targetRing() {
var starts: any = startScheduleTime.split(':')
var ends: any = endScheduleTime.split(':')
const startSeconds: any = parseInt(starts[0] + '') * 60 + parseInt(starts[1] + '')
const endSeconds: any = parseInt(ends[0] + '') * 60 + parseInt(ends[1] + '')
const color = isSleepMode ? '#D0C0FB' : '#FF498366'
const startArc = isSleepMode ? startSeconds / 1440 * 2 * Math.PI - Math.PI / 2 : endSeconds / 1440 * 2 * Math.PI - Math.PI / 2
const fastCount = endSeconds - startSeconds > 0 ? endSeconds - startSeconds : endSeconds - startSeconds + 1440
const eatCount = 1440 - fastCount
const durationArc = isSleepMode ? fastCount / 1440 * 2 * Math.PI : eatCount / 1440 * 2 * Math.PI
return {
color,
startArc,
durationArc
}
}
function realRing() {
if (isSleepMode) {
if (isCurrentTimeInRange( startScheduleTime,endScheduleTime)) {
var starts: any = startScheduleTime.split(':')
const startSeconds = parseInt(starts[0] + '') * 60 + parseInt(starts[1] + '')
const color = MainColorType.sleep
const startArc = startSeconds / 1440 * 2 * Math.PI - Math.PI / 2
var endSeconds = new Date().getHours() * 60 + new Date().getMinutes()
const fastCount = endSeconds - startSeconds > 0 ? endSeconds - startSeconds : endSeconds - startSeconds + 1440
const durationArc = fastCount / 1440 * 2 * Math.PI
return {
color,
startArc,
durationArc
}
}
}
else {
if (isCurrentTimeInRange(endScheduleTime, startScheduleTime)) {
var starts: any = endScheduleTime.split(':')
const startSeconds = parseInt(starts[0] + '') * 60 + parseInt(starts[1] + '')
const color = MainColorType.active
const startArc = startSeconds / 1440 * 2 * Math.PI - Math.PI / 2
var endSeconds = new Date().getHours() * 60 + new Date().getMinutes()
const fastCount = endSeconds - startSeconds > 0 ? endSeconds - startSeconds : endSeconds - startSeconds + 1440
const durationArc = fastCount / 1440 * 2 * Math.PI
return {
color,
startArc,
durationArc
}
}
}
}
function ring() {
var offset = 0
var hour = new Date().getHours()
var minute = new Date().getMinutes()
if (hour != new Date().getHours() || minute != new Date().getMinutes()) {
offset = hour * 60 + minute - new Date().getHours() * 60 - new Date().getMinutes()
}
const currentDot: CurrentDot = {
color: isSleepMode ? MainColorType.sleep : MainColorType.active,
lineWidth: 10,
borderColor: '#fff',
offset: offset,
whiteIcon: true
}
return
}
function isCurrentTimeInRange(start, end) {
// 获取当前时间
const now = new Date();
const currentTime = now.getHours() * 60 + now.getMinutes(); // 当前时间转换为分钟
// 将时间点转换为分钟
const [startHour, startMinute] = start.split(':').map(Number);
const [endHour, endMinute] = end.split(':').map(Number);
const startTime = startHour * 60 + startMinute; // 开始时间转换为分钟
const endTime = endHour * 60 + endMinute; // 结束时间转换为分钟
// 处理跨日的情况
if (endTime < startTime) {
return currentTime >= startTime || currentTime <= endTime;
}
// 判断当前时间是否在范围内
return currentTime >= startTime && currentTime <= endTime;
}
return
Sleep Active
{
ring()
}
{formatTime('HH:mm:ss')}
{global.language == 'en' ? formatTime('dddd, MMM D') : formatTime('MMMD日 dddd')}
Switch
}