如何在 Javascript 中使用 Moment js 将 ISO 8601 解析为日期和时间格式?

IT技术 javascript parsing reactjs momentjs iso
2021-04-01 00:48:56

我目前正在使用 Moment js 将 ISO 8601 字符串解析为日期和时间,但它无法正常工作。我究竟做错了什么?我也会采取任何其他更简单的解决方案。

我想解析的 ISO 8601:"2011-04-11T10:20:30Z"字符串中的日期:"2011-04-11"和字符串中的时间:"10:20:30"

并尝试console.log(moment("2011-04-11T10:20:30Z" ,moment.ISO_8601))console.log(moment("2011-04-11T10:20:30Z" , ["YYYY",moment.ISO_8601])作为测试,但它只是返回一个具有所有不同类型属性的对象。

2个回答

使用moment.js

var str = '2011-04-11T10:20:30Z';
var date = moment(str);
var dateComponent = date.utc().format('YYYY-MM-DD');
var timeComponent = date.utc().format('HH:mm:ss');
console.log(dateComponent);
console.log(timeComponent);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script>

或者简单地使用字符串操作

var str = '2011-04-11T10:20:30Z';
var parts = str.slice(0, -1).split('T');
var dateComponent = parts[0];
var timeComponent = parts[1];
console.log(dateComponent);
console.log(timeComponent);

谁知道这两个字符串的 OP 意图是什么?如果这是唯一需要的东西,我不会加载库来更改className由 a 引用的元素上的id为工作使用正确的工具,但要保持简单。
2021-05-26 00:48:56
您是否意识到您正在使用原始 Javascript 日期逻辑,以便您可以使用更高阶的日期处理库?这更像是使用 $(document.getElementById('foo')); 它有效,但大多数人会在整个过程中使用该工具 ( $('#foo'))。同样在这里,这个答案有效,但是您失去了 Moment 通过手动进行字符串和日期解析而给您带来的很多好处。恕我直言,从长远来看,通过学习如何使用你的工具(时刻)而不是放弃它,你会得到更好的服务。
2021-06-17 00:48:56

moment 操作有两个部分:读取日期/时间,然后将其吐出。你有第一部分:

moment("2011-04-11T10:20:30Z")

但是你需要调用一个输出函数,例如:

moment("2011-04-11T10:20:30Z").format('YYYY-MM-DD h:mm:ss a')

编辑:但是值得注意的是 Moment 本身是一个已弃用的库,甚至其作者也会建议切换到较小的竞争对手:https : //momentjs.com/docs/

我目前在 PST。在我接受答案并投票之前,您能否展示一个示例,其中包含我试图通过时区修改获得的确切格式?日期字符串:"2011-04-11"和时间字符串:"10:20:30"我查看了文档,但没有太大帮助。
2021-05-27 00:48:56
附带说明一下,时区是 Moment 中最烦人的事情之一,我经常希望它们能掩盖它们……但最终作为 Web 开发人员,我很高兴它们没有。您的一些用户几乎肯定会在与您不同的时区使用您的网站,因此您必须仔细考虑如何在服务器上存储日期,以及在向用户显示日期时您的 JS/Moment 代码如何将它们本地化.
2021-05-29 00:48:56
您可以在此处找到所有格式模式的完整细分:momentjs.com/docs/#/displaying但是,我不认为时间是格式问题;我很确定这是一个时区问题。您的初始日期字符串缺少时区位,因此 Moment 决定将其解释为某个时区(我猜是 0 GMT),然后向您显示相对于当前时区的时间(我猜您生活在 +/- 7从格林威治标准时间?)。您需要阅读有关时区的 Moment 文档(或者可能提出一个单独的问题)来解决这个问题。
2021-06-08 00:48:56
日期时间字符串小时部分有四个选项假设时间是下午 1 点:h=“1”... hh=“01”... H=“13”... HH=“13”。下午 1 点的最后两个相同,但如果我们切换到凌晨 1 点,它们将变为:H=“1”... HH=“01”。换句话说,大写控制时间是基于 12 还是 24,两个字母表示 Moment 将用“0”填充时间。我无法从您的问题中判断您是否想要填充,或者您想要 12 小时还是 24 小时时间,因为您选择了 10 作为示例(并且所有四种格式都相同)。
2021-06-12 00:48:56
感谢您的答复。目前它是控制台日志记录:2011-04-11 3:20:30 am所以日期是正确的,但时间是错误的。不应该是 hh:mm:ss 吗?试过了,但仍然是 03 而不是 10。
2021-06-19 00:48:56