如何将Windows时区转换为时刻js时区

时间:2018-05-22 06:24:25

标签: c# timezone momentjs aurelia moment-timezone

我有一个下拉菜单,可以在UI中选择时区。 enter image description here 从Windows时区设置下拉列表中获取的下拉数据 enter image description here

如果在选定的某个时区中记录用户,我必须根据所选的时区格式显示所有日期时间字段和DST。

我的表结构是 enter image description here

打字稿代码

import * as moment from 'moment';
import * as momenttimezone from 'moment-timezone';

private ConvertServerTimezoneToClient(dateTime: string, dateFormat: string, timeFormat: string, timezoneFormat: string, isDstzone: string) {
    timeFormat = timeFormat.toString().indexOf('tt') > -1 ? timeFormat.replace('tt', 'a') : timeFormat;
    var convertedTime = '';
    if (timezoneFormat && timezoneFormat != '' && timezoneFormat != "null") {
        if (isDstzone == 'true') {
            momenttimezone.tz.add(''); // need to map
            momenttimezone.tz.link(''); // need to map
            var zoneName = ''; // need to map
            var isDstDate = momenttimezone.tz(new Date(dateTime), zoneName).isDST();
            if (isDstDate) {
                convertedTime = moment(dateTime).zone(timezoneFormat).add(1, 'hours').format(dateFormat + ' ' + timeFormat);
            } else {
                convertedTime = moment(dateTime).zone(timezoneFormat).format(dateFormat + ' ' + timeFormat);
            }
        }
        else {
            convertedTime = moment(dateTime).zone(timezoneFormat).format(dateFormat + ' ' + timeFormat);
        }
    }
    return convertedTime
}

时刻js有更多的时区格式 https://github.com/moment/moment-timezone/blob/develop/data/packed/latest.json

如何将Windows时区映射到时刻时区。 UI基本代码是aurelia打字稿。需要帮助。

1 个答案:

答案 0 :(得分:2)

没有快速或简单的方法来做到这一点。 Momentjs不支持它,也没有计划任何一个 - 出于同样的原因,你应该在服务器上而不是在客户端上这样做。如果您需要在.NET代码中使用Windows格式的时区use NodaTime on your server to do this

如果由于某种原因您仍坚持在客户端上执行此操作,则可以使用official file for conversion between Windows and IANA timezones。解析该文件,然后使用它来进行映射。

除此之外,我强烈建议使用UNIX时间戳而不是字符串。它的很多更容易传递一个不公平的数字,每个体面的DateTime库都知道如何正确转换,而不是跟踪并正确解析所有地方的字符串时间戳。