我有一个处理不同时区的web应用程序。这个应用程序将所有日期存储在UTC + 00:00中,并在使用我编写的一组函数显示时间之前将时间转换为本地时间。
从将date string转换为datetime object,将datetime object从UTC +00:00转换为本地时间,这一切都工作得很好,但是在我使用date.toLocaleString()获取本地datetime string之后,我无法按我想要的方式格式化它,因为它返回以下格式:3/23/2021, 9:19:00 PM,而且我尝试过的所有苹果设备都无法解析此字符串并将其转换为有效的日期。
我只想获取本地时间并将其从3/23/2021, 9:19:00 PM格式化为23 Mar 2021 21:19。我已经编写了一个函数来为我执行此格式化操作,但是浏览器无法从字符串解析3/23/2021, 9:19:00 PM并将其转换为date object。
我正在用React JS (JavaScript)开发应用程序。
下面是执行字符串解析和日期格式化的函数:
const formatDateString = date => {
const parsed = new Date(Date.parse(date.replace(",", "")))
const months_string = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
const months_array = months_string.split(" ")
let output = ""
output = output + parsed.getDate() < 10 ? "0" + parsed.getDate() : parsed.getDate()
output = output + " " + months_array[parsed.getMonth()]
output = output + " " + parsed.getFullYear()
let hours = parsed.getHours() < 10 ? "0" + parsed.getHours() : parsed.getHours()
output = output + " " + hours
let minutes = parsed.getMinutes() < 10 ? "0" + parsed.getMinutes() : parsed.getMinutes()
output = output + ":" + minutes
return output
}发布于 2021-03-24 19:43:41
我最终完全避免了解析问题,并创建了自己的解析器,该解析器将用于我的场景。此解决方案仅适用于您的输入格式与我的输入格式相同的情况,尽管可以对其进行修改以使用几乎任何日期格式。代码如下:
export const formatDateStringApple = date_string => {
const months_string = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
const months_array = months_string.split(" ")
const split_datetime = date_string.split(" ")
const date = split_datetime[0].replace(",", "")
const _split_time = split_datetime[1].split(" ")
const time = _split_time[0]
const isPm = _split_time[1] == "PM" ? true : false
const split_date = date.split("/")
const split_time = time.split(":")
return `${split_date[1]} ${months_array[split_date[0] - 1]} ${split_date[2]} ${isPm ? split_time[0] + 12 : split_time[0] < 10 ? "0" + split_time[0] : split_time[0]}:${split_time[1]}`
}也许(可能)有更好的方法来做这件事,但这是我能想到的最快的方法。
发布于 2021-03-24 22:28:47
您的问题指出您的代码“从将date string转换为datetime object……”
这对你有用吗?
let d = new Date();
var options = { year: 'numeric', month: 'short', day: 'numeric' };
var s = d.toLocaleString('en-GB', options);
options = { hour: 'numeric', minute: 'numeric' };
s += ' ' + d.toLocaleString('en-GB', options);
console.log(s);
// output:
// 24 Mar 2021 10:26注意:使用'en-GB‘将日期按“日、月、年”的顺序排列。
https://stackoverflow.com/questions/66779614
复制相似问题