微信小程序Date.now()和new Date()什么区别
时间: 2023-11-17 10:27:22 浏览: 66
`Date.now()`返回的是当前时间的时间戳,精确到毫秒。而`new Date()`返回的是一个表示当前时间的Date对象,精确到毫秒。
具体来说,`Date.now()`返回一个数字,表示从1970年1月1日 00:00:00 UTC(协调世界时)到当前时间的毫秒数。而`new Date()`则返回一个Date对象,包含了当前时间的年月日、时分秒等信息。
举个例子,假设当前时间是2022年1月1日 12点0分0秒,那么:
- `Date.now()` 返回的是1641043200000(表示从1970年1月1日 00:00:00 UTC到现在过去了1641043200000毫秒);
- `new Date()` 返回的是一个Date对象,包含了当前时间的年月日、时分秒等信息,例如:`Sat Jan 01 2022 12:00:00 GMT+0800 (中国标准时间)`。
因此,如果你只需要获取当前时间的时间戳,可以使用`Date.now()`,而如果你需要获取当前时间的具体信息,如年月日、时分秒等,可以使用`new Date()`。
相关问题
如何在微信小程序app.js增加一个判断系统时间有没有被篡改的函数,如果系统时间被篡改就不允许运行,并弹窗提示,系统时间被篡改,如果系统时间正常,就允许运行小程序,按照这个功能写一个完整的函数代码
可以使用小程序提供的API `wx.checkIsSupportSoterAuthentication`来判断系统时间是否被篡改。如果返回结果为`false`,则说明系统时间被篡改,否则说明系统时间正常。
下面是一个示例代码:
```javascript
function checkSystemTime() {
wx.checkIsSupportSoterAuthentication({
success(res) {
if (res.supportMode.indexOf('fingerPrint') !== -1) {
wx.checkIsSoterEnrolledInDevice({
checkAuthMode: 'fingerPrint',
success(res) {
if (!res.isEnrolled) {
wx.showToast({
title: '您还没有录入指纹,请先录入指纹',
icon: 'none'
})
} else if (res.isEnrolled && res.errMsg === 'checkIsSoterEnrolledInDevice:ok') {
const date = new Date()
const now = date.getTime()
if (Math.abs(now - Date.now()) > 300000) {
wx.showToast({
title: '系统时间被篡改,请校准时间',
icon: 'none'
})
return false
}
return true
} else {
wx.showToast({
title: '检测失败,请重试',
icon: 'none'
})
}
},
fail() {
wx.showToast({
title: '检测失败,请重试',
icon: 'none'
})
}
})
}
},
fail() {
wx.showToast({
title: '检测失败,请重试',
icon: 'none'
})
}
})
}
```
在判断系统时间之前,需要先调用`wx.checkIsSupportSoterAuthentication`方法判断当前设备是否支持生物认证,如果支持,则再调用`wx.checkIsSoterEnrolledInDevice`方法检测是否已经录入指纹,如果未录入指纹,则弹出提示框提示用户先录入指纹。如果已经录入指纹,则计算当前时间与系统时间的差值,如果差值超过5分钟,则认为系统时间被篡改,弹出提示框提示用户校准时间。如果差值不超过5分钟,则认为系统时间正常,返回`true`。
使用该函数时,可以在小程序的`app.js`文件中调用`checkSystemTime()`函数,并根据返回结果进行相应的处理。例如:
```javascript
App({
onLaunch: function () {
const isSystemTimeValid = checkSystemTime()
if (!isSystemTimeValid) {
// 系统时间被篡改,不允许运行小程序
return
}
// 系统时间正常,允许运行小程序
// ...
}
})
```
async function getServerTime() { console.log('获取时间'); const now = Date.now(); const cacheServerTimeTime = app.globalData.servertimetime || 0; const cacheServerTime = app.globalData.servertime || null; const date = new Date() const y = date.getFullYear() const m = date.getMonth() + 1 const d = date.getDate() const systemToday = y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d) if (cacheServerTime && now - cacheServerTimeTime < 5 * 60 * 1000 && systemToday === cacheServerTime) { console.log('缓存servertime未过期,返回缓存servertime'); return cacheServerTime; } else { console.log('缓存servertime过期,重新获取服务器时间'); const today = await wx.cloud.callFunction({name: 'getServerTime'}); app.globalData.servertime = today.result; app.globalData.servertimetime = Date.now(); return today.result; } }这段代码在微信小程序中存在那些问题?你能指出问题,并修复问题吗?
这段代码存在以下问题:
1. 缺少`app`对象的定义,需要在代码中定义或者引入。
2. `wx.cloud.callFunction`是一个异步函数,在调用时需要使用`await`关键字。
3. 在判断缓存是否过期时,应该先判断缓存是否存在,否则会出现未定义错误。
修复后的代码如下:
```
async function getServerTime() {
const app = getApp();
console.log('获取时间');
const now = Date.now();
const cacheServerTimeTime = app.globalData.servertimetime || 0;
const cacheServerTime = app.globalData.servertime || null;
const date = new Date();
const y = date.getFullYear();
const m = date.getMonth() + 1;
const d = date.getDate();
const systemToday = y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d);
if (cacheServerTime && now - cacheServerTimeTime < 5 * 60 * 1000 && systemToday === cacheServerTime) {
console.log('缓存servertime未过期,返回缓存servertime');
return cacheServerTime;
} else {
console.log('缓存servertime过期,重新获取服务器时间');
const { result } = await wx.cloud.callFunction({name: 'getServerTime'});
app.globalData.servertime = result;
app.globalData.servertimetime = Date.now();
return result;
}
}
```
阅读全文