繁体   English   中英

谷歌标签管理器上的时间戳

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM