Moment.js - 如何将日期字符串转换为日期?

42

继续跟进我之前的帖子:Javascript Safari: new Date() with strings returns invalid date when typed

我正在使用Moment.js将日期字符串转换为日期字段,根据文本框中用户输入的内容。

这是为了防止链接帖子中描述的Safari和Firefox无法呈现日期的问题,而Chrome没有问题。

这是代码片段:

var tempDate = moment(userInputFieldDate).format('DD-MM-YYYY');
alert(tempDate);

在Chrome中它工作正常(它也曾经与JavaScript Date对象一起工作),但是会给我moment.js弃用警告。

弃用警告:moment构造回退到js日期。 这是不鼓励的,并将在即将发布的主要版本中删除。 有关更多信息,请参见https://github.com/moment/moment/issues/1407。 参数:[object Object] 错误

在Firefox和Safari中,它只在警示窗口中给出UNDEFINED DATE。 因此,我不确定应该如何将日期字符串转换为日期对象。

对于此问题有什么建议吗?

3个回答

132

如果您获取到基于JS的日期 String,则首先使用new Date(String)构造函数创建Date对象,然后将该对象传递给moment方法。示例:

var dateString = 'Thu Jul 15 2016 19:31:44 GMT+0200 (CEST)';
var dateObj = new Date(dateString);
var momentObj = moment(dateObj);
var momentString = momentObj.format('YYYY-MM-DD'); // 2016-07-15

假如dateString15-07-2016,那么你应该使用moment(date:String, format:String)方法。

var dateString = '07-15-2016';
var momentObj = moment(dateString, 'MM-DD-YYYY');
var momentString = momentObj.format('YYYY-MM-DD'); // 2016-07-15

1
如果用户输入的日期字符串是"07-07-2016",那么dateString是什么? - noobcoder
现在我有另一个问题。我使用了上面的方法来获取用户输入的日期。但是,同一用户输入字段与日历下拉菜单相关联。如果我从日历下拉菜单中选择日期,它现在会显示无效日期:( 因此,对于键盘输入日期有效,但对于从日历选择的日期无效。 - noobcoder
你应该首先检查日期的格式,看它是一个日期对象还是一个字符串,如果是字符串,则需要确定其格式,然后使用正确的 moment 对象构建器调用和正确的 format 字符串(你可以将多个可能的格式作为数组给出(请查阅文档))。 - Matyas
所以我意识到在我的HTML中,日期字段格式是“MM-DD-YYYY”,但我从后端的AJAX调用中接收到的格式是“YYYY-MM-DD”。技术上,UI显示格式为MM-DD-YYYY,但即使后端为YYYY-MM-DD。 但当您键入MM-DD-YYYY时,由于明显的原因而出错。因此,根据格式,我需要转换和重新转换。我清楚了还是让你感到困惑呢? - noobcoder
太棒了,我已经寻找这个很久了。谢谢@Matyas。 - HarshitMadhav
运行良好!分享这个很不错。 - Philip Developer

7

简单易用!
moment('2020-12-04T09:52:03.915Z').format('lll');

2020年12月4日 下午4:58

其他格式

moment.locale();         // en
moment().format('LT');   // 4:59 PM
moment().format('LTS');  // 4:59:47 PM
moment().format('L');    // 12/08/2020
moment().format('l');    // 12/8/2020
moment().format('LL');   // December 8, 2020
moment().format('ll');   // Dec 8, 2020
moment().format('LLL');  // December 8, 2020 4:59 PM
moment().format('lll');  // Dec 8, 2020 4:59 PM
moment().format('LLLL'); // Tuesday, December 8, 2020 4:59 PM
moment().format('llll'); // Tue, Dec 8, 2020 4:59 PM

2

如果你有一个日期字符串,那么可以尝试这个方法。

原始答案:Original Answer

const FORMAT = "YYYY ddd MMM DD HH:mm";

const theDate = moment("2019 Tue Apr 09 13:30", FORMAT);
// Tue Apr 09 2019 13:30:00 GMT+0300

const theDate1 = moment("2019 Tue Apr 09 13:30", FORMAT).format('LL')
// April 9, 2019

or try this :

const theDate1 = moment("2019 Tue Apr 09 13:30").format(FORMAT);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接