tmp
This commit is contained in:
86
agent/escort-admin/tools/calendar/utils.js
Normal file
86
agent/escort-admin/tools/calendar/utils.js
Normal file
@@ -0,0 +1,86 @@
|
||||
import * as z from "zod"
|
||||
import { tool } from "langchain"
|
||||
import lunar from "lunar-javascript"
|
||||
const { Solar, Lunar, HolidayUtil, TermUtil } = lunar
|
||||
|
||||
/**
|
||||
* 获取准确时间工具
|
||||
* 通过国内权威时间源获取当前准确时间
|
||||
* @returns {string} - 返回当前准确时间的JSON字符串
|
||||
*/
|
||||
export async function getAccurateTime() {
|
||||
const timeSources = [
|
||||
{
|
||||
name: 'timeapi.io',
|
||||
url: 'https://timeapi.io/api/Time/current/zone?timeZone=Asia/Shanghai',
|
||||
method: 'json'
|
||||
},
|
||||
{
|
||||
name: '国家授时中心',
|
||||
url: 'http://www.ntsc.ac.cn',
|
||||
method: 'header'
|
||||
},
|
||||
{
|
||||
name: '阿里云',
|
||||
url: 'https://www.aliyun.com',
|
||||
method: 'header'
|
||||
},
|
||||
{
|
||||
name: '腾讯云',
|
||||
url: 'https://cloud.tencent.com',
|
||||
method: 'header'
|
||||
},
|
||||
{
|
||||
name: '华为云',
|
||||
url: 'https://www.huaweicloud.com',
|
||||
method: 'header'
|
||||
}
|
||||
]
|
||||
|
||||
for (const source of timeSources) {
|
||||
try {
|
||||
const startTime = Date.now()
|
||||
const res = await fetch(source.url)
|
||||
const latency = Date.now() - startTime
|
||||
|
||||
let timestamp = null
|
||||
let beijingTime = null
|
||||
|
||||
if (source.method === 'json') {
|
||||
const data = await res.json()
|
||||
timestamp = new Date(data.dateTime).getTime()
|
||||
beijingTime = data.dateTime
|
||||
} else if (source.method === 'header') {
|
||||
const dateHeader = res.headers.get('Date')
|
||||
if (dateHeader) {
|
||||
timestamp = new Date(dateHeader).getTime()
|
||||
beijingTime = new Date(timestamp).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
|
||||
}
|
||||
}
|
||||
|
||||
if (timestamp) {
|
||||
return {
|
||||
timestamp,
|
||||
date: new Date(timestamp).toISOString(),
|
||||
localTime: beijingTime,
|
||||
source: source.name,
|
||||
latency: latency,
|
||||
success: true
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(`从 ${source.name} 获取时间失败: ${error.message}`)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
const date = new Date()
|
||||
return {
|
||||
timestamp: date.getTime(),
|
||||
date: date.toISOString(),
|
||||
localTime: date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }),
|
||||
success: false,
|
||||
message: '使用本地时间作为备份'
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user