[英]Timestamp on Google Tag Manager
我需要一点帮助来在谷歌标签管理器上创建一个变量,该变量会带我触发事件的时间戳。
现在我已经实现了这个自定义 javascript 但它把我作为将触发事件的用户所在国家的时区。 另一方面,我希望时区始终为 +02.00,有人可以教我需要修改代码的哪一部分以始终设置我的时区吗?
谢谢
function()
{
var now = new Date();
var tzo = -now.getTimezoneOffset();
var dif = tzo >= 0 ? '+' : '-';
var pad = function(num) {
var norm = Math.abs(Math.floor(num));
return (norm < 10 ? '0' : '') + norm;
};
return now.getHours()
+ ':' + pad(now.getMinutes())
+ ':' + pad(now.getSeconds())
+ '.' + pad(now.getMilliseconds())
+ dif + pad(tzo / 60)
+ ':' + pad(tzo % 60);
}
这应该足够了:
function qwe() { var d = new Date(); nd = new Date((d.getTime() + (d.getTimezoneOffset() * 60000)) + (3600000 * 2)); var tzo = 120; var dif = tzo >= 0? '+': '-'; var pad = function (num) { var norm = Math.abs(Math.floor(num)); return (norm < 10? '0': '') + norm; }; return nd.getHours() + ':' + pad(nd.getMinutes()) + ':' + pad(nd.getSeconds()) + '.' + pad(nd.getMilliseconds()) + dif + pad(tzo / 60) + ':' + pad(tzo % 60); }
尝试查看“如何忽略用户的时区并强制 Date() 使用特定时区”的答案: 如何忽略用户的时区并强制 Date() 使用特定时区
它说:
Date 对象的基础值实际上是 UTC。 为了证明这一点,请注意,如果您键入new Date(0)
,您将看到类似以下内容: Wed Dec 31 1969 16:00:00 GMT-0800 (PST)
。 0 在 GMT 中被视为 0,但.toString()
方法显示本地时间。
重要的是,UTC代表世界时间代码。 2 个不同地方的当前时间是相同的 UTC,但 output 的格式可以不同。
我们这里需要的是一些格式
var _date = new Date(1270544790922);
// outputs > "Tue Apr 06 2010 02:06:30 GMT-0700 (PDT)", for me
_date.toLocaleString('fi-FI', { timeZone: 'Europe/Helsinki' });
// outputs > "6.4.2010 klo 12.06.30"
_date.toLocaleString('en-US', { timeZone: 'Europe/Helsinki' });
// outputs > "4/6/2010, 12:06:30 PM"
这可行,但是....您不能真正使用任何其他日期方法来达到您的目的,因为它们描述了用户的时区。 您想要的是与赫尔辛基时区相关的日期 object。 此时您的选择是使用一些 3rd 方库(我推荐这个),或者修改日期 object 以便您可以使用它的大部分方法。
选项 1 - 像 moment-timezone 这样的第 3 方
moment(1270544790922).tz('Europe/Helsinki').format('YYYY-MM-DD HH:mm:ss')
// outputs > 2010-04-06 12:06:30
moment(1270544790922).tz('Europe/Helsinki').hour()
// outputs > 12
这看起来比我们接下来要做的要优雅得多。
选项 2 - 修改日期 object
var currentHelsinkiHoursOffset = 2; // sometimes it is 3
var date = new Date(1270544790922);
var helsenkiOffset = currentHelsinkiHoursOffset*60*60000;
var userOffset = _date.getTimezoneOffset()*60000; // [min*60000 = ms]
var helsenkiTime = new Date(date.getTime()+ helsenkiOffset + userOffset);
// Outputs > Tue Apr 06 2010 12:06:30 GMT-0700 (PDT)
它仍然认为它是 GMT-0700 (PDT),但如果你不盯着看,你可能会误以为它是对你的目的有用的日期 object。
我很方便地跳过了一部分。 您需要能够定义currentHelsinkiOffset
。 如果您可以在服务器端使用date.getTimezoneOffset()
,或者只使用一些 if 语句来描述何时发生时区更改,那应该可以解决您的问题。
结论- 我认为特别是为此目的,您应该使用像moment-timezone这样的日期库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.