Javascript 格式化a moment.js+;使用jquery全球化的时区

Javascript 格式化a moment.js+;使用jquery全球化的时区,javascript,jquery,date,momentjs,jquery-globalize,Javascript,Jquery,Date,Momentjs,Jquery Globalize,我使用moment.js+timezone处理日期和时间对象,并使用globalize向用户显示数字、货币等 现在我想用globalize打印一个moment.js日期,所以我的第一种方法是只使用moment.js的to getDate()函数,它不幸地丢弃了时区信息(例如1)。当我使用转换为正确时区的日期值初始化新日期()时,我会得到正确的结果(Ex 2),但当我使用完整版本时,它会显示时区UTC(显然不正确)。有没有办法让这些组件一起工作 var m = moment.tz(14597794

我使用moment.js+timezone处理日期和时间对象,并使用globalize向用户显示数字、货币等

现在我想用globalize打印一个moment.js日期,所以我的第一种方法是只使用moment.js的to getDate()函数,它不幸地丢弃了时区信息(例如1)。当我使用转换为正确时区的日期值初始化新日期()时,我会得到正确的结果(Ex 2),但当我使用完整版本时,它会显示时区UTC(显然不正确)。有没有办法让这些组件一起工作

var m = moment.tz(1459779436, 'Europe/Berlin');
// Ex 1: Date is printed in UTC, so with an offset of 2 hours
globalize.formatDate(m.getDate(), {datetime: 'full'});
globalize.formatDate(new Date(m.toISOString()), {datetime: 'full'});
// Ex 2: Correct times are printed, but with wrong timezone
globalize.formatDate(new Date(m.year(), m.month(), m.date(), m.hour(), m.minute(), m.seconds(), m.milliseconds()), {datetime: 'full'});

Globalize将在即将发布的1.3版上支持IANA时区

npm install globalize@1.3.0-alpha.0 cldr-data iana-tz-data
然后

PS:注意,它还支持解析特定IANA时区中的日期字符串

这里的细节


旧答案:

您是否可以使用momente.js进行日期操作,并使用Globalize对不带时区部分的日期进行格式化,即使用
{datetime:“medium”}
[1]的第二个示例。这对你来说可行吗?或者,您可以使用该选项,再加上使用moment.js打印时区名称吗

1:请注意,如果您需要不同的/自定义模式,您可以使用

正确答案

Globalize时区支持仅限于本机JavaScript日期提供的功能,其时区支持仅限于获取用户的本地时区偏移量,即不允许使用其他时区名称或时区偏移量设置日期。因此,它只允许格式化用户的本地时区(不是任意时区)。因此,我相信Globalize在格式化日期和时间方面会对您有所帮助,但它的时区部分不会。如果您想了解更多关于全球化时区支持的信息,请访问


使用Globalize格式化日期将为您提供符合CLDR的格式(以及最新的区域设置数据),并为您提供运行时支持:较小的最终文件大小(用于更快的页面加载)和预编译格式化程序(用于更快的客户端执行)()。我希望这能有所帮助,如果您还有其他问题,请告诉我。

Globalize将在即将发布的1.3版上支持IANA时区

npm install globalize@1.3.0-alpha.0 cldr-data iana-tz-data
然后

PS:注意,它还支持解析特定IANA时区中的日期字符串

这里的细节


旧答案:

您是否可以使用momente.js进行日期操作,并使用Globalize对不带时区部分的日期进行格式化,即使用
{datetime:“medium”}
[1]的第二个示例。这对你来说可行吗?或者,您可以使用该选项,再加上使用moment.js打印时区名称吗

1:请注意,如果您需要不同的/自定义模式,您可以使用

正确答案

Globalize时区支持仅限于本机JavaScript日期提供的功能,其时区支持仅限于获取用户的本地时区偏移量,即不允许使用其他时区名称或时区偏移量设置日期。因此,它只允许格式化用户的本地时区(不是任意时区)。因此,我相信Globalize在格式化日期和时间方面会对您有所帮助,但它的时区部分不会。如果您想了解更多关于全球化时区支持的信息,请访问


使用Globalize格式化日期将为您提供符合CLDR的格式(以及最新的区域设置数据),并为您提供运行时支持:较小的最终文件大小(用于更快的页面加载)和预编译格式化程序(用于更快的客户端执行)()。我希望这能对您有所帮助,如果您还有其他问题,请告诉我。

我现在使用了一种非常粗糙的方法,简单地用一个函数替换了新日期的getTimezoneOffset,该函数返回由时刻时区生成的值

function momentToDate(input) { // Do NOT use the result to anything else than passing it into globalize
    var res = new Date(input.year(), input.month(), input.date(), input.hour(), input.minute(), input.seconds(), input.milliseconds());
    var offset = input.utcOffset();
    res.getTimezoneOffset = function() {
        return offset;
    }
    return res;
}

因此globalize将打印正确的日期和正确的时区偏移量。

我现在使用了一种非常粗糙的方法,简单地用一个函数替换新日期的getTimezoneOffset,该函数返回由时刻时区生成的值

function momentToDate(input) { // Do NOT use the result to anything else than passing it into globalize
    var res = new Date(input.year(), input.month(), input.date(), input.hour(), input.minute(), input.seconds(), input.milliseconds());
    var offset = input.utcOffset();
    res.getTimezoneOffset = function() {
        return offset;
    }
    return res;
}

所以globalize将打印正确的日期和正确的时区偏移量。

好的,谢谢您的解释,这与我的计算结果基本相符。我在节点应用程序中使用这两个组件,以允许客户使用可选模板格式化日期(在奇怪的时区),因此我喜欢选择使用globalize的date/time/datetime+short/meidum/long/full模板,但我想我必须使用另一种解决方案。不过还是要谢谢你!好的,谢谢你的解释,这与我的结论基本吻合。我在节点应用程序中使用这两个组件,以允许客户使用可选模板格式化日期(在奇怪的时区),因此我喜欢选择使用globalize的date/time/datetime+short/meidum/long/full模板,但我想我必须使用另一种解决方案。不过还是要谢谢你!