我现在一直在与此斗争。我正在尝试将纪元转换为日期对象。这个时代以UTC的形式发送给我。每当你通过new Date()
一个时代,它就会假定它是本地时代。我尝试创建一个UTC对象,然后使用setTime()
将其调整到适当的纪元,但唯一有用的方法是toUTCString()
,字符串对我没有帮助。如果我将该字符串传递给新的日期,它应该注意到它是UTC,但它没有。
new Date( new Date().toUTCString() ).toLocaleString()
我的下一次尝试是尝试区分本地当前时期和UTC当前时期,但我也无法得到它。
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
它只给我很小的差异,低于1000,这是毫秒。
有什么建议吗?
答案 0 :(得分:411)
我想我有一个更简单的解决方案 - 将初始日期设置为纪元并添加UTC单位。假设您有一个UTC纪元var存储在几秒钟内。 1234567890
怎么样?要将其转换为当地时区的正确日期:
var utcSeconds = 1234567890;
var d = new Date(0); // The 0 there is the key, which sets the date to the epoch
d.setUTCSeconds(utcSeconds);
d
现在是一个日期(在我的时区)设置为Fri Feb 13 2009 18:31:30 GMT-0500 (EST)
答案 1 :(得分:167)
这很简单,new Date()
只需要几毫秒,例如
new Date(1394104654000)
> Thu Mar 06 2014 06:17:34 GMT-0500 (EST)
答案 2 :(得分:29)
就日志问题而言,我使用Moment.js库完成了这项工作,无论如何我都会使用它来进行格式化。
moment.utc(1234567890000).local()
>Fri Feb 13 2009 19:01:30 GMT-0430 (VET)
答案 3 :(得分:16)
function ToLocalDate (inDate) {
var date = new Date();
date.setTime(inDate.valueOf() - 60000 * inDate.getTimezoneOffset());
return date;
}
答案 4 :(得分:16)
大纪元时间是从1970年1月1日起的秒。date.getTime()
从1970年1月1日起返回毫秒,所以..如果你有一个纪元时间戳,通过乘以1000将其转换为javascript时间戳。
function epochToJsDate(ts){
// ts = epoch timestamp
// returns date obj
return new Date(ts*1000);
}
function jsDateToEpoch(d){
// d = javascript date obj
// returns epoch timestamp
return (d.getTime()-d.getMilliseconds())/1000;
}
答案 5 :(得分:3)
您是否只是要求将UTC字符串转换为“本地”字符串?你可以这样做:
var utc_string = '2011-09-05 20:05:15';
var local_string = (function(dtstr) {
var t0 = new Date(dtstr);
var t1 = Date.parse(t0.toUTCString().replace('GMT', ''));
var t2 = (2 * t0) - t1;
return new Date(t2).toString();
})(utc_string);
答案 6 :(得分:3)
除了@djechlin的上述答案
d = '1394104654000';
new Date(parseInt(d));
将EPOCH时间转换为人类可读的日期。只是不要忘记,EPOCH时间类型必须是整数。
答案 7 :(得分:2)
将[ms]中的当前纪元时间转换为24小时制。您可能需要指定disable 12-hour格式的选项。
$ node.exe -e "var date = new Date(Date.now()); console.log(date.toLocaleString('en-GB', { hour12:false } ));"
2/7/2018, 19:35:24
或作为JS:
var date = new Date(Date.now());
console.log(date.toLocaleString('en-GB', { hour12:false } ));
// 2/7/2018, 19:35:24
console.log(date.toLocaleString('en-GB', { hour:'numeric', minute:'numeric', second:'numeric', hour12:false } ));
// 19:35:24
注意:此处en-GB
的使用只是使用24小时格式的地点的(随机)选择,它不是您的时区!
答案 8 :(得分:2)
我找到的最简单的解决方案是:
var timestamp = Date.Now()
var normalisedTime = new Date(timestamp)
请注意,这在* 1000
语句的末尾没有new Date(timestamp)
,因为这(无论如何对我来说!)似乎总是给出错误的日期,即,而不是给出2019年的日期将年份定为51015,所以请记住这一点。
答案 9 :(得分:2)
Epoch时间(即Unix纪元时间)几乎总是从1970年1月1日00:00:00(UTC时间)开始已经过期的秒的数目,而不是毫秒的数目此处暗示了一些答案。
https://en.wikipedia.org/wiki/Unix_time
因此,如果为您提供了Unix Epoch时间值,则该时间值可能以秒为单位,并且看起来像1547035195
。如果您想让人们在JavaScript中可读,则需要将值转换为毫秒,然后将该值传递到Date(value)
构造函数中,例如:
const unixEpochTimeMS = 1547035195 * 1000;
const d = new Date(unixEpochTimeMS);
// Careful, the string output here can vary by implementation...
const strDate = d.toLocaleString();
您不需要在接受的答案中执行d.setUTCMilliseconds(0)
步骤,因为JavaScript Date(value)
构造函数采用 UTC 值(以毫秒为单位)(而不是本地时间)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax
还请注意,应避免使用采用字符串日期时间表示形式的Date(...)
构造函数,不建议这样做(请参见上面的链接)。
答案 10 :(得分:1)
修改强>
var utcDate = new Date(incomingUTCepoch);
var date = new Date();
date.setUTCDate(utcDate.getDate());
date.setUTCHours(utcDate.getHours());
date.setUTCMonth(utcDate.getMonth());
date.setUTCMinutes(utcDate.getMinutes());
date.setUTCSeconds(utcDate.getSeconds());
date.setUTCMilliseconds(utcDate.getMilliseconds());
编辑已修复
答案 11 :(得分:1)
var myDate = new Date( your epoch date *1000);
答案 12 :(得分:1)
如果您希望在没有像moment.js这样的库的情况下解决UTC和当地时间的时间戳和日期转换,请查看下面的选项。
对于使用UTC时间戳的应用程序,您可能需要在适用时考虑本地时区和夏令时在浏览器中显示日期。即使在同一时区内编辑处于不同夏令时的日期也很棘手。
以下Number
和Date
扩展程序允许您在时间戳的时区中显示和获取日期。例如,假设您在温哥华,如果您在7月或12月编辑日期,则可能意味着您正在PST或PDT中编辑日期。
我建议您查看下面的代码片段以测试此解决方案。
从毫秒开始的转化次数
Number.prototype.toLocalDate = function () {
var value = new Date(this);
value.setHours(value.getHours() + (value.getTimezoneOffset() / 60));
return value;
};
Number.prototype.toUTCDate = function () {
var value = new Date(this);
value.setHours(value.getHours() - (value.getTimezoneOffset() / 60));
return value;
};
来自日期的转化次数
Date.prototype.getUTCTime = function () {
return this.getTime() - (this.getTimezoneOffset() * 60000);
};
<强>用法强>
// Adds the timezone and daylight savings if applicable
(1499670000000).toLocalDate();
// Eliminates the timezone and daylight savings if applicable
new Date(2017, 6, 10).getUTCTime();
亲眼看看
// Extending Number
Number.prototype.toLocalDate = function () {
var value = new Date(this);
value.setHours(value.getHours() + (value.getTimezoneOffset() / 60));
return value;
};
Number.prototype.toUTCDate = function () {
var value = new Date(this);
value.setHours(value.getHours() - (value.getTimezoneOffset() / 60));
return value;
};
// Extending Date
Date.prototype.getUTCTime = function () {
return this.getTime() - (this.getTimezoneOffset() * 60000);
};
// Getting the demo to work
document.getElementById('m-to-local-button').addEventListener('click', function () {
var displayElement = document.getElementById('m-to-local-display'),
value = document.getElementById('m-to-local').value,
milliseconds = parseInt(value);
if (typeof milliseconds === 'number')
displayElement.innerText = (milliseconds).toLocalDate().toISOString();
else
displayElement.innerText = 'Set a value';
}, false);
document.getElementById('m-to-utc-button').addEventListener('click', function () {
var displayElement = document.getElementById('m-to-utc-display'),
value = document.getElementById('m-to-utc').value,
milliseconds = parseInt(value);
if (typeof milliseconds === 'number')
displayElement.innerText = (milliseconds).toUTCDate().toISOString();
else
displayElement.innerText = 'Set a value';
}, false);
document.getElementById('date-to-utc-button').addEventListener('click', function () {
var displayElement = document.getElementById('date-to-utc-display'),
yearValue = document.getElementById('date-to-utc-year').value || '1970',
monthValue = document.getElementById('date-to-utc-month').value || '0',
dayValue = document.getElementById('date-to-utc-day').value || '1',
hourValue = document.getElementById('date-to-utc-hour').value || '0',
minuteValue = document.getElementById('date-to-utc-minute').value || '0',
secondValue = document.getElementById('date-to-utc-second').value || '0',
year = parseInt(yearValue),
month = parseInt(monthValue),
day = parseInt(dayValue),
hour = parseInt(hourValue),
minute = parseInt(minuteValue),
second = parseInt(secondValue);
displayElement.innerText = new Date(year, month, day, hour, minute, second).getUTCTime();
}, false);
&#13;
<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.11/semantic.css" rel="stylesheet"/>
<div class="ui container">
<p></p>
<h3>Milliseconds to local date</h3>
<input id="m-to-local" placeholder="Timestamp" value="0" /> <button id="m-to-local-button">Convert</button>
<em id="m-to-local-display">Set a value</em>
<h3>Milliseconds to UTC date</h3>
<input id="m-to-utc" placeholder="Timestamp" value="0" /> <button id="m-to-utc-button">Convert</button>
<em id="m-to-utc-display">Set a value</em>
<h3>Date to milliseconds in UTC</h3>
<input id="date-to-utc-year" placeholder="Year" style="width: 4em;" />
<input id="date-to-utc-month" placeholder="Month" style="width: 4em;" />
<input id="date-to-utc-day" placeholder="Day" style="width: 4em;" />
<input id="date-to-utc-hour" placeholder="Hour" style="width: 4em;" />
<input id="date-to-utc-minute" placeholder="Minute" style="width: 4em;" />
<input id="date-to-utc-second" placeholder="Second" style="width: 4em;" />
<button id="date-to-utc-button">Convert</button>
<em id="date-to-utc-display">Set the values</em>
</div>
&#13;
答案 13 :(得分:0)
最简单的方法
如果您以毫秒为单位的unix纪元,就我而言-1601209912824
const dateObject = new Date(milliseconds)
const humanDateFormat = dateObject.toString()
Sun Sep 27 2020 18:01:52 GMT+0530 (India Standard Time)
const dateObject = new Date(milliseconds)
const humanDateFormat = dateObject.toUTCString()
答案 14 :(得分:0)
考虑到,您有epoch_time
可用,
// for eg. epoch_time = 1487086694.213
var date = new Date(epoch_time * 1000); // multiply by 1000 for milliseconds
var date_string = date.toLocaleString('en-GB'); // 24 hour format
答案 15 :(得分:0)
Date.prototype.setUTCTime = function(UTCTimestamp) {
var UTCDate = new Date(UTCTimestamp);
this.setUTCFullYear(UTCDate.getFullYear(), UTCDate.getMonth(), UTCDate.getDate());
this.setUTCHours(UTCDate.getHours(), UTCDate.getMinutes(), UTCDate.getSeconds(), UTCDate.getMilliseconds());
return this.getTime();
}
答案 16 :(得分:-1)
首先将其转换为String,然后替换时区文本。
function convertUnixTime(time) {
return new Date(time*1000).toString().replace("GMT+0530 (Sri Lanka Standard Time)","");
}