JavaScript的Date()
对象让我发疯。我正在尝试获取当前UTC日期(mm/dd/yyyy
)。我需要在世界任何地方都一样的日期。因此,为此,我使用了类似(new Date()).getUTCDate())
方法的UTC方法。但是最近,当用户抱怨时,我发现返回的值在世界各地都不尽相同。
我需要一种确定的方法来根据通用时间获取当前日期(而不是过去)。
(new Date()).getTime()
对我不起作用,因为它会以毫秒为单位返回。
我的代码:
function getToday() {
var today = new Date();
var dd = today.getUTCDate();
var mm = today.getUTCMonth() + 1; //January is 0!
var yyyy = today.getUTCFullYear();
if (dd < 10) {
dd = '0' + dd
}
if (mm < 10) {
mm = '0' + mm
}
today = mm + '/' + dd + '/' + yyyy
return today;
}
console.log(getToday());
编辑:
我联系了该用户,并告诉他基本执行(new Date()).getUTCDate())
。他一天休息了(正确答案是27)
此外,他的时区偏移为180
他正在Windows计算机上使用Chrome(我不知道哪个版本)
EDIT2:
我刚刚做过一些数学运算,但是发现了一些奇怪的东西。
我的用户说,当一天更改时,他每天下午12:00都会遇到问题。他告诉我他晚上9:53有问题。知道他的时区偏移量为180分钟,而我的时区偏移量为240,因此我可以通过执行myTime + offsetDifference
来计算此时的时间。但是(((9*60 + 53) + (240 - 180)) / 60
)等于大约11PM。因此,他的PC时间必须落后1小时。
他本可以手动设置时间,但时区错误。
答案 0 :(得分:1)
显然,我的用户未设置时区,而是设置了时钟。如果是这样,正如乔纳森·格雷(Jonathan Gray)指出的那样,即使UTC时间在本地进行检查,也将是错误的。他已经固定了时区,并且可以解决。
此外,正如Phil所指出的,如果要使用任何可靠的通用标准时间,则必须使用时间永远正确的受信任后端。为此,我还找到了一个名为World Clock API的网站。但是,正如我注意到的那样,要获得可靠的服务并保证它在您的站点启动时就可以启动,则必须将其集成到服务器中。一种简单的方法是使用PHP的time()方法,并计算相对于客户端时间的偏移量。