首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行iOS和MacOS (apple)操作系统的设备上出现解析日期问题

问在运行iOS和MacOS (apple)操作系统的设备上出现解析日期问题
EN

Stack Overflow用户
提问于 2021-03-24 18:59:47
回答 2查看 31关注 0票数 0

我有一个处理不同时区的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)开发应用程序。

下面是执行字符串解析和日期格式化的函数:

代码语言: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
}
EN

回答 2

Stack Overflow用户

发布于 2021-03-24 19:43:41

我最终完全避免了解析问题,并创建了自己的解析器,该解析器将用于我的场景。此解决方案仅适用于您的输入格式与我的输入格式相同的情况,尽管可以对其进行修改以使用几乎任何日期格式。代码如下:

代码语言:javascript
复制
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]}`
}

也许(可能)有更好的方法来做这件事,但这是我能想到的最快的方法。

票数 0
EN

Stack Overflow用户

发布于 2021-03-24 22:28:47

您的问题指出您的代码“从将date string转换为datetime object……”

这对你有用吗?

代码语言:javascript
复制
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‘将日期按“日、月、年”的顺序排列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66779614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档