在javascript中,是否有一种有效的方法来编写将时间戳转换为本地时间的函数?



我已经写了一个函数,将获得一个"活动数组"因为它在响应中保存时间戳。

时间戳是这样的:20220714.1757

以下函数将输出:7/14/2022 12:57:00 PM

这是伟大的,正是我想要的;然而,我觉得我的代码臃肿、肮脏、低效。有没有一种有效的方法来表示这个函数?我是自学的,所以我欢迎任何材料或参考资料来学习更多。

function get_timestamp(activityArray) {
let timestampBlock = activityArray[0];
let timestamp_array = timestampBlock.split(".");
let dateBlock = timestamp_array[0];
let timeBlock = timestamp_array[1];
let date_array = dateBlock.split("");
let year = date_array[0] + date_array[1] + date_array[2] + date_array[3];
let month = date_array[4] + date_array[5];
let day = date_array[6] + date_array[7];
let date = year + "-" + month + "-" + day;
let time_array = timeBlock.split("");
let hour = time_array[0] + time_array[1];
let minute = time_array[2] + time_array[3];
let time = new Date(date + "T" + hour + ":" + minute + "Z");
console.log(date + "T" + hour + ":" + minute + "Z")
let formatted_time = time.toLocaleString();
let formatted_time_array = formatted_time.split(",");
let timestamp = formatted_time_array[0] + " " + formatted_time_array[1];
return timestamp;
}
console.log(get_timestamp(["20220714.1757"]));

可以使用正则表达式很好地提取日期部分。然后您可以将这些作为单独的参数提供给Date.UTC,这样就可以避免字符串解析。只需要注意使月份的数字从零开始:

function get_timestamp(str) {
return new Date(Date.UTC(
...str.match(/^....|dd/g).map((p, i) => p - !--i)
)).toLocaleString('en-US').replace(",", "");
}
console.log(get_timestamp('20220714.1757'));

清理代码的一件事是将循环操作的参数放入数据中。在这里,fields描述了在输入字符串中期望日期元素的位置。

您可能有其他原因转换为JS日期,然后格式化为ISO字符串,然后操作该字符串,但这个过程似乎很迂回。这里,我们只是将捕获的日期元素插入到一个新的字符串中。

(旁注:您的示例输入17:57可能意味着使用12小时时钟的下午5:57 -而不是OP建议的12:57)

function get_timestamp(str) {
const fields = [
{ key: 'year', start: 0, end: 4 },
{ key: 'month', start: 4, end: 6 },
{ key: 'day', start: 6, end: 8 },
{ key: 'hour', start: 9, end: 11 },
{ key: 'minute', start: 11, end: 13 }
];
// produces { year: '2022', month: '07', ...
const d = fields.reduce((acc, el) => {
acc[el.key] = str.slice(el.start, el.end);
return acc;
}, {})
// convert to 12-hour clock
d.ampm = d.hour > 12 ? 'PM' : 'AM';
if (d.ampm === 'PM') d.hour -= 12;
// format using string interpolation
return `${d.month}/${d.day}/${d.year} ${d.hour}:${d.minute}:00 ${d.ampm}`
}
const activityArray = ['20220714.1757']
console.log(get_timestamp(activityArray[0]))

function convert_timestamp(timestamp) {
function convert_timestamp(timestamp) {
const hour = parseInt(timestamp.slice(9, 11)) + 2;
return `${timestamp.slice(6, 8)}/${timestamp.slice(4, 6)}/${timestamp.slice(0, 4)} ${hour > 24 ? (hour - 24).toString().padStart(2, "0") : hour.toString().padStart(2, "0")}:${timestamp.slice(11, 13)}:00`
}
console.log(convert_timestamp("20220714.2357")) // 14/07/2022 01:57:00
}

简单一行。

最新更新