(使用dayjs版本1.10.7)
我有这个文件date.js
包含一个日期函数isPrioritizedItemOverdue
:
const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
const timeZonePlugin = require('dayjs-ext/plugin/timeZone-custom');
const { populateTimeZones } = require('timezone-support/dist/lookup-convert');
const timeZoneData = require('./custom-data-2000-2032');
const LocalizedFormat = require('dayjs/plugin/localizedFormat');
const func = require('./func');
require('dayjs/locale/en-gb');
require('dayjs/locale/fr');
populateTimeZones(timeZoneData);
dayjs.extend(LocalizedFormat).extend(timeZonePlugin).extend(utc);
const isPrioritizedItemOverdue = ({ date, userTimezone }) => {
if (date) {
const todayInTimezone = dayjs().format({ timeZone: userTimezone });
const startOfTodayInUtc = dayjs(
`${todayInTimezone.substr(0, 10)}T00:00:00.000`)
.utc()
.toDate();
const targetDateInUtc = dayjs(date).utc().toDate();
return startOfTodayInUtc > targetDateInUtc;
}
return false;
};
module.exports = {
isPrioritizedItemOverdue,
}
isPrioritizedItemOverdue
在应用程序中工作正常,但是当运行使用它的测试时,我得到了从dayjs().format({ timeZone: userTimezone })
返回的Invalid Date
:
import date from '../date';
test('isPrioritizedItemOverdue', () => {
const result = date.isPrioritizedItemOverdue({
date: '2022-01-01T00:00:00.000Z',
userTimezone: 'Europe/London'
});
expect(result).toBeTruthy();
});
1条答案
按热度按时间7kjnsjlb1#
这似乎是旧节点版本(节点16和更旧)的问题,新版本(至少节点18)可以正常工作。
节点18对
Intl
API进行了一些改进(https://nodejs.org/de/blog/announcements/v18-release-announce/#v8-10-1)