【发布时间】:2018-11-26 00:48:35
【问题描述】:
我有一个似乎无法解决的 JavaScript 问题:
我将日期转换为时间戳,当我将其转换回来时,它会显示正确的日期时间:
日期时间到时间戳:
var ts = Math.floor(Date.now() / 1000);
然后返回 - 迄今为止的时间戳:
var a = new Date(ts * 1000);
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
var sec = a.getSeconds();
var formattedTime = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
问题是当我使用输入数据而不是使用 Date.now() 时, 它转换为时间戳,但是当我将其转换回 dateTime 时,Hour 参数正好提前 4 小时。
var destinationDateTimeStr_ = document.getElementById("dateyear").value+"-"+document.getElementById("datemonth").value+"-"+document.getElementById("dateday").value+"T"+document.getElementById("datehour").value+":"+document.getElementById("dateminute").value+":00";
//convert date as string to timezone
var date2 = new Date(destinationDateTimeStr_); //2018-06-16T15:35:00
ts_ = Math.floor(date2 / 1000);
然后返回 - 迄今为止的时间戳:
var a = new Date(ts_ * 1000);
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
var sec = a.getSeconds();
var formattedTime = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
//returns: 2018-06-16T11:35:00 - 4 hours earlier
如果所有转换都在同一个客户端(同一个时区)上完成,那会怎样?
然后我尝试了:
var offset = new Date().getTimezoneOffset();
但它返回 -180 仅 3 小时而不是 4 小时
然后我尝试了:
var tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
但它给了我一个文本(在我的情况下意味着 -2 小时:亚洲/耶路撒冷)
我做错了什么?
【问题讨论】:
-
UTC 和 GMT 时区显示我是 +3
-
警报 (Math.floor(new Date('2018-06-19T15:40:00') / 1000)); //产生错误的时间戳和警报( Math.floor(Date.now() / 1000)); //产生正确的时间戳(你可以通过在第一行输入当前日期时间来测试它)
-
试试:
let dat = new Date(Date.UTC(2018, 5, 16, 15, 57, 00)) console.log(Math.floor( dat/ 1000)); console.log( Math.floor(Date.now() / 1000));注意六月是5,月份从0开始 -
Javascript 日期已知会导致问题。忘掉这个。试试momentjs.com
-
实际上使用 CDN 可以让您的客户使用它。检查我的答案。 :)
标签: javascript datetime timestamp datetime-format intl