将 UTC 时间转换为 Javascript 中的本地时间,给出未来日期
Convert UTC time to local time in Javascript, giving future date
我从后端获取 created_at 时间戳,格式为 UTC,我需要在浏览器中呈现。我 在 Angular-7 中使用日期管道。在阅读了一些博客和 Whosebug 之后,我在下面编写了这个函数来获得正常的日期格式,我可以通过 angular 中的日期管道进行格式化。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC
- 问题:输出在未来的日期。
- 输入:“22-12-2020 03:44:09 UTC”
- 输出:“2021 年 1 月 22 日星期五 09:14:09 GMT+0530(印度标准时间)”
getDateFromUTC(dateString: string) {
const date = dateString
.split(" ")[0]
.split("-")
.map((number) => parseInt(number));
const hours = dateString
.split(" ")[1]
.split(":")
.map((num) => parseInt(num));
const convertedDate = new Date(
Date.UTC(date[2], date[1], date[0], hours[0], hours[1],hours[2])
);
return convertedDate;
}
getDateFromUTC("22-12-2020 03:44:09 UTC")
我做错了什么?
date
对象中的月份从 0
开始。所以你的代码应该减少 1
个月。 Refer here.
Date.UTC(date[2], date[1] - 1, date[0], hours[0], hours[1],hours[2])
function getDateFromUTC(dateString) {
const date = dateString
.split(" ")[0]
.split("-")
.map((number) => parseInt(number));
const hours = dateString
.split(" ")[1]
.split(":")
.map((num) => parseInt(num));
const convertedDate = new Date(
Date.UTC(date[2], date[1] - 1, date[0], hours[0], hours[1], hours[2])
);
return convertedDate;
}
var localDate = getDateFromUTC('22-12-2020 03:44:09 UTC')
console.log(localDate.toString());
尽管如此,我不确定为什么您首先将日期放在字符串中。
输入的日期不是标准的 ISO 8601 日期格式YYYY-MM-DDTHH:mm:ss.sssZ
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
所以,你需要先解析它。这是我认为您可以在 moment.js
.
的帮助下获得的信息
function getDateFromUTC(dateString) {
const parts = dateString.split(' ');
parts.pop();
dateString = parts.join(' ');
const d = moment.tz(
dateString,
'DD-MM-YYYY hh:mm:ss',
'UTC'
);
return d.toDate().toString();
}
console.log(getDateFromUTC('22-12-2020 03:44:09 UTC'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data.js"></script>
它returnsTue Dec 22 2020, 09:14:09 GMT+0530 (India Standard Time)
浏览器将自动转换为协调世界时 (UTC) 格式。您不需要进行任何日期转换。
您的后端似乎没有根据 ISO 8601 标准返回正确的 UTC 格式(UTC 日期以 'Z' 结尾)。
UTC 的正确格式是
[yyyy]-[MM]-[dd]T[HH]:[mm]:[ss].[sss]Z
例如:
2020-12-22T03:44:09.000Z
有问题增加了一个月我不知道为什么
function getDateFromUTC(dateString) {
//console.log(mydate);
var medate = dateString;
var day = dateString.substring(0, dateString.indexOf('-'));
dateString = dateString.replace('-', '=')
var month = dateString.substring(3, dateString.indexOf('-'))
console.log(month)
dateString = dateString.replace('-', '=')
var year = dateString.substring(6, dateString.indexOf(' '))
dateString = dateString.replace(' ', '=')
var hour = dateString.substring(11, dateString.indexOf(':'))
dateString = dateString.replace(':', '=')
var minute = dateString.substring(14, dateString.indexOf(':'))
dateString = dateString.replace(':', '=')
var second = dateString.substring(17, dateString.indexOf(' '))
medate = year+'-'+month+'-'+day+'T'+hour+':'+minute+':'+second;
//let utcDate = new Date(year+month+day+'T'+hour+':'+minute+':'+second);
let utcDate = new Date(medate)
var mydate = new Date(Date.UTC(
parseInt(year),
parseInt(month)-1,
parseInt(day),
parseInt(hour),
parseInt(minute),
parseInt(second),
0
));
//Apparently one month is added. I'm not sure why
console.log(mydate)
console.log(utcDate)
}
getDateFromUTC("22-12-2020 03:44:09 UTC");
我从后端获取 created_at 时间戳,格式为 UTC,我需要在浏览器中呈现。我 在 Angular-7 中使用日期管道。在阅读了一些博客和 Whosebug 之后,我在下面编写了这个函数来获得正常的日期格式,我可以通过 angular 中的日期管道进行格式化。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC
- 问题:输出在未来的日期。
- 输入:“22-12-2020 03:44:09 UTC”
- 输出:“2021 年 1 月 22 日星期五 09:14:09 GMT+0530(印度标准时间)”
getDateFromUTC(dateString: string) {
const date = dateString
.split(" ")[0]
.split("-")
.map((number) => parseInt(number));
const hours = dateString
.split(" ")[1]
.split(":")
.map((num) => parseInt(num));
const convertedDate = new Date(
Date.UTC(date[2], date[1], date[0], hours[0], hours[1],hours[2])
);
return convertedDate;
}
getDateFromUTC("22-12-2020 03:44:09 UTC")
我做错了什么?
date
对象中的月份从 0
开始。所以你的代码应该减少 1
个月。 Refer here.
Date.UTC(date[2], date[1] - 1, date[0], hours[0], hours[1],hours[2])
function getDateFromUTC(dateString) {
const date = dateString
.split(" ")[0]
.split("-")
.map((number) => parseInt(number));
const hours = dateString
.split(" ")[1]
.split(":")
.map((num) => parseInt(num));
const convertedDate = new Date(
Date.UTC(date[2], date[1] - 1, date[0], hours[0], hours[1], hours[2])
);
return convertedDate;
}
var localDate = getDateFromUTC('22-12-2020 03:44:09 UTC')
console.log(localDate.toString());
尽管如此,我不确定为什么您首先将日期放在字符串中。
输入的日期不是标准的 ISO 8601 日期格式YYYY-MM-DDTHH:mm:ss.sssZ
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
所以,你需要先解析它。这是我认为您可以在 moment.js
.
function getDateFromUTC(dateString) {
const parts = dateString.split(' ');
parts.pop();
dateString = parts.join(' ');
const d = moment.tz(
dateString,
'DD-MM-YYYY hh:mm:ss',
'UTC'
);
return d.toDate().toString();
}
console.log(getDateFromUTC('22-12-2020 03:44:09 UTC'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data.js"></script>
它returnsTue Dec 22 2020, 09:14:09 GMT+0530 (India Standard Time)
浏览器将自动转换为协调世界时 (UTC) 格式。您不需要进行任何日期转换。
您的后端似乎没有根据 ISO 8601 标准返回正确的 UTC 格式(UTC 日期以 'Z' 结尾)。
UTC 的正确格式是
[yyyy]-[MM]-[dd]T[HH]:[mm]:[ss].[sss]Z
例如:
2020-12-22T03:44:09.000Z
有问题增加了一个月我不知道为什么
function getDateFromUTC(dateString) {
//console.log(mydate);
var medate = dateString;
var day = dateString.substring(0, dateString.indexOf('-'));
dateString = dateString.replace('-', '=')
var month = dateString.substring(3, dateString.indexOf('-'))
console.log(month)
dateString = dateString.replace('-', '=')
var year = dateString.substring(6, dateString.indexOf(' '))
dateString = dateString.replace(' ', '=')
var hour = dateString.substring(11, dateString.indexOf(':'))
dateString = dateString.replace(':', '=')
var minute = dateString.substring(14, dateString.indexOf(':'))
dateString = dateString.replace(':', '=')
var second = dateString.substring(17, dateString.indexOf(' '))
medate = year+'-'+month+'-'+day+'T'+hour+':'+minute+':'+second;
//let utcDate = new Date(year+month+day+'T'+hour+':'+minute+':'+second);
let utcDate = new Date(medate)
var mydate = new Date(Date.UTC(
parseInt(year),
parseInt(month)-1,
parseInt(day),
parseInt(hour),
parseInt(minute),
parseInt(second),
0
));
//Apparently one month is added. I'm not sure why
console.log(mydate)
console.log(utcDate)
}
getDateFromUTC("22-12-2020 03:44:09 UTC");