import { ref } from 'vue' import { createGlobalState, useLocalStorage } from '@vueuse/core' import axios from 'axios' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' import timezone from 'dayjs/plugin/timezone' export const useStockQuote = createGlobalState(() => { const stockQuote = useLocalStorage('stockQuote', { "Open": "", "Volume": "", "DayRange": "", "WeekRange": "", "MarketCap": "", "change": [ "", "" ] }) const date = new Date(); const options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true, timeZone: 'America/New_York', timeZoneName: 'short' }; dayjs.extend(utc) dayjs.extend(timezone) /* 美股的常规发行日(交易日)为周一至周五,遇到法定假日则顺延。 如果你只需要“上一个交易日”(不考虑法定假日)的情况下 获取当前美东时间。 如果今天是周一,则上一个交易日为上周五。 如果今天是周日,则上一个交易日为上周五。 如果今天是周六,则上一个交易日为周五。 其他情况,上一个交易日为昨天。 */ const getLastTradingDay = () => { const now = dayjs().tz('America/New_York') let lastTradingDay const dayOfWeek = now.day() // 0:周日, 1:周一, ..., 5:周五, 6:周六 const isBeforeClose = now.hour() < 16 || (now.hour() === 16 && now.minute() === 0 && now.second() === 0) if (dayOfWeek === 0) { // 周日 // 返回本周五16:00 lastTradingDay = now.day(-2).hour(16).minute(0).second(0).millisecond(0) } else if (dayOfWeek === 6) { // 周六 // 返回本周五16:00 lastTradingDay = now.day(-1).hour(16).minute(0).second(0).millisecond(0) } else if (dayOfWeek === 1 && isBeforeClose) { // 周一16:00前 // 返回上周五16:00 lastTradingDay = now.day(-2).hour(16).minute(0).second(0).millisecond(0) } else if (isBeforeClose) { // 工作日16:00前 // 返回前一天16:00 lastTradingDay = now.subtract(1, 'day').hour(16).minute(0).second(0).millisecond(0) } else { // 工作日16:00后,返回今天16:00 lastTradingDay = now.hour(16).minute(0).second(0).millisecond(0) } return lastTradingDay.format('MMM D, YYYY, h:mm A [EDT]') } const formatted = ref(getLastTradingDay()) const getStockQuate= async()=>{ // const res = await axios.get('https://saas-test.szjixun.cn/api/fiee/chart/forward/test') const res = await axios.get('https://common.szjixun.cn/api/stock/company/data') console.error(res) if(res.status === 200){ if(res.data.status === 0){ stockQuote.value=res.data.data console.error(stockQuote.value) } } } return { formatted, getStockQuate, stockQuote } })