这是我的ISO格式日期。我想要在JavaScript中获取类似“11:00”的时间。 我使用了以下方法:
new Date(Mydate).toLocaleString();
但它给出的时间是“16:30”。在JavaScript中有没有格式或方法可以做到这一点?如何仅获取该时区的时间。
var Mydate = "2012-10-16T11:00:28.556094Z";
输出结果将是“11:00”。
这是我的ISO格式日期。我想要在JavaScript中获取类似“11:00”的时间。 我使用了以下方法:
new Date(Mydate).toLocaleString();
但它给出的时间是“16:30”。在JavaScript中有没有格式或方法可以做到这一点?如何仅获取该时区的时间。
var Mydate = "2012-10-16T11:00:28.556094Z";
现代方法,使用内置于Node.js和大多数现代浏览器中的ECMAScript国际化API:
const myDate = "2012-10-16T11:00:28.556094Z";
const time = new Date(myDate).toLocaleTimeString('en',
{ timeStyle: 'short', hour12: false, timeZone: 'UTC' });
// Output: "11:00"
使用较旧的方法,需要使用moment.js:
var myDate = "2012-10-16T11:00:28.556094Z";
var time = moment.utc(myDate).format("HH:mm");
// Output: "11:00"
var date = new Date(Mydate);
var time = ConvertNumberToTwoDigitString(date.getUTCHours()) +
":" + ConvertNumberToTwoDigitString(date.getUTCMinutes());
// Returns the given integer as a string and with 2 digits
// For example: 7 --> "07"
function ConvertNumberToTwoDigitString(n) {
return n > 9 ? "" + n : "0" + n;
}
getUTCHours()
和 getUTCMinutes()
。 - RononDex试试这个,我忘记从哪里得到的:
// --- Date ---
// convert ISO 8601 date string to normal JS Date object
// usage: (new Date()).setISO8601( "ISO8601 Time" )
Date.prototype.setISO8601 = function(string) {
var d, date, offset, regexp, time;
regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
d = string.match(new RegExp(regexp));
offset = 0;
date = new Date(d[1], 0, 1);
if (d[3]) date.setMonth(d[3] - 1);
if (d[5]) date.setDate(d[5]);
if (d[7]) date.setHours(d[7]);
if (d[8]) date.setMinutes(d[8]);
if (d[10]) date.setSeconds(d[10]);
if (d[12]) date.setMilliseconds(Number("0." + d[12]) * 1000);
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= (d[15] === '-' ? 1 : -1);
}
offset -= date.getTimezoneOffset();
time = Number(date) + (offset * 60 * 1000);
return this.setTime(Number(time));
};
请注意,toLocaleTimeString
的旧实现可能会根据浏览器的不同实现而表现出不同的行为。
日期:2021年9月9日
locales 和 options 参数可自定义函数的行为,并允许应用程序指定应使用哪些语言格式约定。在忽略 locales 和 options 参数的旧实现中,返回的 locales 和字符串形式将完全依赖于实现。
我最近使用的实现:
function getTimeFromISODateString(isoDateString) {
const date = new Date(isoDateString);
const hours = `0${date.getUTCHours()}`.slice(-2);
const minutes = `0${date.getUTCMinutes()}`.slice(-2);
const seconds = `0${date.getUTCSeconds()}`.slice(-2);
return `${hours}:${minutes}:${seconds}`;
}
尝试使用以下代码从ISO日期中获取时间。
let Mydate = '2012-10-16T11:00:28.556094Z';
let result = Mydate .match(/\d\d:\d\d/);
console.log(result[0]);
输出将是:
11:00
这个答案对我来说失败了,因为它被更改为24:34,而不是00:34。
const time = new Date(myDate).toLocaleTimeString('en',
{ timeStyle: 'short', hour12: false, timeZone: 'UTC' });
看起来这对我来说是一个更好的解决方案。
new Date(value).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
如果您不需要使用时区,请使用此选项来分隔日期和时间
const separateDateTime = (dateTime: string) => {
const date = dateTime.split("T")[0];
const time = dateTime.split("T")[1].split(".")[0]
return { date, time };
}
// how to use it
const myDate = "2012-10-16T11:00:28.556094Z";
const dateTimeObj = separateDateTime(myDate)
console.log(dateTimeObj.time)