import { View, Text } from "@tarojs/components"; import './WeekCalendarItem.scss' import { rpxToPx } from "@/utils/tools"; import { useEffect, useState } from "react"; import { ColorType } from "@/context/themes/color"; import { TimeFormatter } from "@/utils/time_format"; import dayjs from 'dayjs' import showAlert from "@/components/basic/Alert"; import { title } from "process"; const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') dayjs.extend(utc) dayjs.extend(timezone) let timer export default function WeekCalendarItem(props: { data: any, isCurrentWeek: boolean }) { const [charts, setCharts] = useState([]) const [showCurrentTime, setShowCurrentTime] = useState(false) const [position, setPosition] = useState({ left: 0, top: 0 }) useEffect(() => { if (props.isCurrentWeek) { if (timer) clearInterval(timer) if (props.isCurrentWeek) { timer = setInterval(() => { getPosition() }, 6000) getPosition() } setShowCurrentTime(props.isCurrentWeek) } else { if (timer) clearInterval(timer) } var array: any = [] for (var i = 0; i < 7; i++) { var start = props.data.start + 24 * 3600 * 1000 * i var end = props.data.start + (24 * 3600 * 1000) * (i + 1) var fasts: any = [] var sleeps: any = [] array.push({ start, end, fasts, sleeps }) props.data.list.map((item, index) => { var isFast = item.scenario == 'FAST' var real_start = item.real_start_time var real_end = item.real_end_time if (item.real_end_timezone && item.real_end_timezone.id) { // var strEnd = dayjs(real_end).tz(item.real_end_timezone.id).format('YYYY-MM-DDTHH:mm:ss') var strEnd = TimeFormatter.tzTimeFormateLocalTime(real_end, item.real_end_timezone.id,'YYYY-MM-DDTHH:mm:ss') var duration = real_end - real_start // if (index = 1) { // if (new Date(strEnd)) { // // 示例字符串 // var isoString = '2021-04-01T15:20:00'; // // 将字符串转换为Date对象 // var date = new Date(strEnd); // showAlert({ // title: strEnd, // content: date.getTime()+'' // }) // } // else { // showAlert({ // title: strEnd, // content: '转换失败' // }) // } // } real_end = new Date(strEnd).getTime() real_start = real_end - duration } var range = getIntersection(start, end, real_start, real_end) if (range) { var begin = (range[0] - start) / (24 * 3600 * 1000) var height = (range[1] - range[0]) / (24 * 3600 * 1000) if (isFast) { fasts.push({ begin, height }) } else { sleeps.push({ begin, height }) } } }) } setCharts(array) // if (array.length>0 && props.isCurrentWeek){ // showAlert({ // title:'111', // content:JSON.stringify(props.data) // }) // } return () => { timer && clearInterval(timer) } }, [props.data]) useEffect(() => { if (timer) clearInterval(timer) if (props.isCurrentWeek) { timer = setInterval(() => { getPosition() }, 60000) getPosition() } setShowCurrentTime(props.isCurrentWeek) }, [props.isCurrentWeek]) function getPosition() { var now = new Date().getTime() var start = props.data.start var index = Math.floor((now - start) / (3600 * 24 * 1000)) var left = (now - start) % (3600 * 24 * 1000) var top = left / (3600 * 24 * 1000) * 400 if (top >= 398) { top = 398 } setPosition({ left: rpxToPx(94 * index), top: rpxToPx(top) }) } function getIntersection(start1, end1, start2, end2) { // 确保 start1 小于等于 end1,start2 小于等于 end2 if (start1 > end1) { [start1, end1] = [end1, start1]; } if (start2 > end2) { [start2, end2] = [end2, start2]; } // 计算相交的时间戳 var intersectionStart = Math.max(start1, start2); var intersectionEnd = Math.min(end1, end2); // 检查是否存在相交时间戳 if (intersectionStart <= intersectionEnd) { // 返回相交的时间戳 return [intersectionStart, intersectionEnd]; } else { // 不存在相交时间戳 return null; } } function isTop() { var now = new Date() if (now.getHours() >= 12) { return true } return false } function weekIndex() { var week = new Date().getDay() if (!isTop()) { return week - 1 } return week } return {TimeFormatter.getDayOfWeek(0)} {TimeFormatter.getDayOfWeek(1)} {TimeFormatter.getDayOfWeek(2)} {TimeFormatter.getDayOfWeek(3)} {TimeFormatter.getDayOfWeek(4)} {TimeFormatter.getDayOfWeek(5)} {TimeFormatter.getDayOfWeek(6)} { charts.map((item, index) => { return { (item as any).fasts.length > 0 && { (item as any).fasts.map((obj, k) => { return }) } } { (item as any).sleeps.length > 0 && { (item as any).sleeps.map((obj, j) => { return }) } } }) } { showCurrentTime && {/* {TimeFormatter.timelineFormatTime(new Date().getTime())} */} } {TimeFormatter.getDayOfWeek(1)} {TimeFormatter.getDayOfWeek(2)} {TimeFormatter.getDayOfWeek(3)} {TimeFormatter.getDayOfWeek(4)} {TimeFormatter.getDayOfWeek(5)} {TimeFormatter.getDayOfWeek(6)} {TimeFormatter.getDayOfWeek(0)} }