![](/img/trans.png)
[英]Convert Any Date Inserted To ISO Format Without The Timestamp In JavaScript
[英]Convert iso timestamp to date format with Javascript?
这似乎是一个非常简单的问题,但我似乎无法得到答案。 如何使用 JavaScript 转换 iso 时间戳以显示日期/时间?
时间戳示例:2012-04-15T18:06:08-07:00
任何帮助表示赞赏,谷歌让我失望了。 谢谢你。
将其传递给Date构造函数。
> var date = new Date('2012-04-15T18:06:08-07:00')
> date
Mon Apr 16 2012 04:06:08 GMT+0300 (EEST)
有关日期的更多信息,请检查https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date 。
javascript的最新版本(在某些最新的浏览器中为v1.85或更高版本)可以直接处理ISO日期,因此您可以将字符串直接传递给Date()
构造函数,如下所示:
var jsDate = new Date("2012-04-15T18:06:08-07:00");
但是较旧的浏览器(IE9之前的任何版本的IE,Firefox 4之前的任何版本的Firefox等)都不支持此功能。 对于这些浏览器,您可以像datejs一样获得可以为您完成此操作的库,也可以像这样自己解析它:
var t = "2012-04-15T18:06:08-07:00";
function convertDate(t) {
var dateRE = /(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)([+\-]\d+):(\d+)/;
var match = t.match(dateRE);
var nums = [], item, date;
if (match) {
for (var i = 1; i < match.length; i++) {
nums.push(parseInt(match[i], 10));
}
if (nums[7] < 0) {
nums[8] *= -1;
}
return(new Date(nums[0], nums[1] - 1, nums[2], nums[3] - nums[6], nums[4] - nums[7], nums[5]));
}
}
var jsDate = convertDate(t);
此处的工作示例: http : //jsfiddle.net/jfriend00/QSgn6/
这是到目前为止我所见过的最好的,它能够使用客户端的桌面时区并通过时区设置实时更改:
<script type="text/javascript">
//Use: timeZoneConvert("2015-11-03T17:36:20.970");
//Mon Nov 02 2015 17:36:20 GMT-0600 (Central Standard Time) [Date object]
//To format string use: timeZoneConvertFormatted("2015-11-03T17:36:20.970")
//November 2, 2015 5:36 PM
//Works even when I change client timezone to Pacific Standard
//Mon Nov 02 2015 15:36:20 GMT-0800 (Pacific Standard Time)
var months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
function timeZoneConvert(dateStr) {
var d = parse_iso8601(dateStr);
//Change (- 360) constant for your server, mine is Central Standard
var dTimezoneOffset = new Date(d.getTime() - ((new Date()).getTimezoneOffset() - 360)*60000);
return dTimezoneOffset;
}
function timeZoneConvertFormatted(dateStr) {
return fDateTime(timeZoneConvert(dateStr));
}
function fDateTime(date1) {
var date = date1.getDate();
var year = date1.getFullYear();
var month = months[date1.getMonth() + 1];
var h = date1.getHours();
var m = date1.getMinutes();
var ampm = "AM";
if(m < 10) {
m = "0" + m;
}
if(h > 12) {
h = h - 12;
var ampm = "PM";
}
return month + " " + date + ", " + year + " " + h + ":" + m + " " + ampm;
}
var iso8601extended = /^\d{4}(-\d{2}(-\d{2}([T ]\d{2}(:\d{2}(:\d{2})?)?([,.]\d+)?(Z|[+-]\d{2}(:\d{2})?)?)?)?)?$/;
var iso8601basic = new RegExp(iso8601extended.source.replace(/[:-]\\d/g, '\\d'));
var firstNumber = /[^\d]*(\d+)/g;
function parse_iso8601(s) {
s = s.replace(/,/g, '.');
var matches = iso8601extended.exec(s);
if (matches) {
s = s.substr(0, 10).replace(/-/g, '') + s.substr(10).replace(/:/g, '');
}
matches = iso8601basic.exec(s);
if (!matches) {
return null;
}
var d = new Date();
d.setUTCFullYear(toNumber(matches[0].substring(0, 4)));
d.setUTCMonth(matches[1] ? toNumber(matches[1].substr(0, 2)) - 1 : 0);
d.setUTCDate(matches[2] ? toNumber(matches[2].substr(0, 2)) : 1);
var hours = 0, minutes = 0, seconds = 0, milliseconds = 0;
var fraction = matches[6] ? parseFloat(matches[6]) : 0;
if (matches[3]) {
hours = toNumber(matches[3].substr(1, 2));
if (matches[4]) {
minutes = toNumber(matches[4].substr(0, 2));
if (matches[5]) {
seconds = toNumber(matches[5].substr(0, 2));
milliseconds = 1000 * fraction;
} else {
seconds = 60 * fraction;
}
} else {
minutes = 60 * fraction;
}
}
if (!matches[7]) {
d.setHours(hours);
d.setMinutes(minutes);
} else {
d.setUTCHours(hours);
d.setUTCMinutes(minutes);
}
d.setUTCSeconds(seconds);
d.setUTCMilliseconds(milliseconds);
if (matches[7] && matches[7] != 'Z') {
offset = toNumber(matches[7].substr(1, 2)) * 60;
if (matches[8]) {
offset += toNumber(matches[8].substr(0, 2));
}
d.setTime(d.getTime() + 60000 * offset * (matches[7].substr(0, 1) == '-' ? 1 : -1));
}
return d;
}
function toNumber(s) {
return parseInt(s.replace(/^0+(\d)/, '$1'));
}
</script>
const now = new Date(); // create a new date object with the current time
// Here are some examples of what javascript provides:
console.log({
now,
toDateString: now.toDateString(),
toISOString: now.toISOString(),
toLocaleString: now.toLocaleString(),
toLocaleDateString: now.toLocaleDateString(),
toLocaleTimeString: now.toLocaleTimeString(),
toUTCString: now.toUTCString(),
toTimeString: now.toTimeString(),
})
这打印:
[LOG]: {
"now": "2022-08-02T10:29:26.891Z",
"toDateString": "Tue Aug 02 2022",
"toISOString": "2022-08-02T10:29:26.891Z",
"toLocaleString": "02/08/2022, 11:29:26",
"toLocaleDateString": "02/08/2022",
"toLocaleTimeString": "11:29:26",
"toUTCString": "Tue, 02 Aug 2022 10:29:26 GMT",
"toTimeString": "11:29:26 GMT+0100 (British Summer Time)"
}
或者,对于更多选项,您可以使用类似moment的东西。 例如,我在这里使用它来将日期转换为英国可读的日期字符串:
import moment from "moment";
const now = new Date(); // create a new date object with the current time
const getTimeFormatted = (date: number) =>
moment(date).format("DD/MM/yyyy hh:mm a");
console.log(getTimeFormatted(now)) // prints: 01/08/2022 11:29 am
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.