我正在开发一个包含在Windows CE设备中的嵌入式网站。 将其视为路由器的Web配置界面。 一切都包含在一个非常小的内存中,整个网站的每个脚本,HTML,CSS和图标都不到500KB。
我们必须假设要“浏览”该界面的用户无法访问互联网(仅限局域网),因此此处没有“在线”解决方案。 < /强>
我正在寻找一个解决方案,以便用户选择他的时区,代码将获得至少10到20年的所有DST / STD时间和日期,并将其下载到将在此之后自动运行的设备上。在特定日期,将自己的时间改为DST / STD。 当前的应用程序是自定义的(不是与windowce api相关),需要DST / STD日期对。
iana.org正在为世界上的每个地方维护一个数据库。我还看到,时间 - 时区(javascript界面)将这些数据“封装”在一个非常紧凑的25kb压缩包中。
我需要知道是否可以:
var itsTimeZones = moment.tz.names();
2-提取所选区域的未来10 - 20年DST / STD日期/时间?我没有在这个主题的任何地方看到任何文档。但是因为它是这种数据库的目的,我想说它必须在某处埋葬,需要一种方法来挖掘它。
3-如果时刻时区不合适,那么任何人都有满足这一要求的解决方案吗?
Thanxs
答案 0 :(得分:0)
我的解决方案,用于从时刻区域提取给定区域的DST列表。 1.&#34; theTz&#34;是来自网页中选择的更改的数字索引。 2. select使用&#34; List&#34;。
填充var itsTz =
{
"List" : moment.tz.names(), // Get all zone 'Names'
"Transitions" : [],
};
function TimeZoneChanged(theTz)
{
var myZone = moment.tz.zone(itsTz.List[theTz]); // Get zone by its name from List
var myTime = moment.tz(moment(), myZone.name); // Start today
var myResult;
// Build transition list according to new zone selected
itsTz.Transitions = [];
do
{
myResult = GetNextTransition(myZone, myTime);
if(myResult != null)
{
itsTz.Transitions.push(moment(myResult).format("YYYY/MM/DD"));
myTime = moment.tz(myResult, myZone.name); // Get next from date found
}
}while(myResult != null);
}
function GetNextTransition(theZone, theTime)
{
var myResult;
for(var i = 0; i < theZone.untils.length; i++)
{
if(theZone.untils[i] > theTime)
{
theZone.untils[i] == Infinity ? myResult = null : myResult = new moment(theZone.untils[i]).format();
return myResult;
}
}
}
美国/多伦多的结果:
2017年3月12日, 2017年11月5日, 2018年3月11日, 2018年11月4日, 2019年3月10日, 2019年11月3日, 2020年3月8日, 2020年11月1日, 2021年3月14日, 2021年11月7日, 2022年3月13日, 2022年11月6日, 2023年3月12日, 2023年11月5日, 2024年3月10日, 2024年11月3日, 2025年3月9日, 2025年11月2日, 2026年3月8日, 2026年11月1日, 2027年3月14日, 2027年11月7日, 2028年3月12日, 2028年11月5日, 2029年3月11日, 2029年11月4日, 2030年3月10日, 2030年11月3日, 2031年3月9日, 2031年11月2日, 2032年3月14日, 2032年11月7日, 2033年3月13日, 2033年11月6日, 2034年3月12日, 2034年11月5日, 2035年3月11日, 2035年11月4日, 2036年3月9日, 2036年11月2日, 2037年3月8日, 2037年11月1日,