fiee-official-website/src/store/stock-quote/index.js

86 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
})