使用 moment.js 解析字符串到日期

Posted

技术标签:

【中文标题】使用 moment.js 解析字符串到日期【英文标题】:Parse string to date with moment.js 【发布时间】:2014-04-06 17:50:18 【问题描述】:

我想用 moment.js 2014-02-27T10:00:00 解析以下字符串并输出 日月年(2014 年 3 月 14 日) 我一直在阅读文档但没有成功 http://momentjs.com/docs/#/parsing/now/

【问题讨论】:

【参考方案1】:

我似乎总是发现自己登陆这里只是意识到标题和问题不太一致。

如果你想要一个字符串中的moment date

const myMomentObject = moment(str, 'YYYY-MM-DD')

来自moment documentation:

Moment.js 没有修改原生 Date.prototype,而是为 Date 对象创建了一个包装器。

如果您想要一个字符串中的javascript Date 对象

const myDate = moment(str, 'YYYY-MM-DD').toDate();

【讨论】:

是的,只有这个答案。将字符串解析为日期(意思是输入为str,输出为日期)【参考方案2】: 如何将任何字符串日期更改为对象日期(也可以使用 moment.js):

let startDate = "2019-01-16T20:00:00.000"; let endDate = "2019-02-11T20:00:00.000"; let sDate = new Date(startDate); let eDate = new Date(endDate);

与moment.js:

startDate = moment(sDate); endDate = moment(eDate);

【讨论】:

【参考方案3】:

moment 非常适合我的需要。注意它会忽略小时和分钟,如果你允许它就这样做。这对我来说非常完美,因为我的 API 调用会返回日期和时间,但我只关心日期。

function momentTest() 

  var varDate = "2018-01-19 18:05:01.423";
  var myDate =  moment(varDate,"YYYY-MM-DD").format("DD-MM-YYYY");
  var todayDate = moment().format("DD-MM-YYYY");  
  var yesterdayDate = moment().subtract(1, 'days').format("DD-MM-YYYY");   
  var tomorrowDate = moment().add(1, 'days').format("DD-MM-YYYY");

  alert(todayDate);

  if (myDate == todayDate) 
    alert("date is today");
   else if (myDate == yesterdayDate) 
    alert("date is yesterday");
   else if (myDate == tomorrowDate) 
    alert("date is tomorrow");
   else 
    alert("It's not today, tomorrow or yesterday!");
  

【讨论】:

【参考方案4】:

也许试试 IE8 的 Intl polyfill 或 olyfill 服务?

https://github.com/andyearnshaw/Intl.js/

【讨论】:

Internet Explorer 不再存在。 哦,我多么梦想有这个特权【参考方案5】:

moment.js 不需要解析输入,因为它的格式是标准格式:

var date = new Date('2014-02-27T10:00:00');
var formatted = moment(date).format('D MMMM YYYY');

http://es5.github.io/#x15.9.1.15

【讨论】:

这是事实,如果您有 ISO 日期字符串,则不需要 moment.js... 您还可以使用 Date.parse 更清楚地表明您正在使用 ISO 字符串(因为构造函数可以采用其他格式) 在 IE8 中不起作用...真是惊喜...给NaN @JuanMendes,你的链接说,Date.parse 调用new Date,所以它不应该有所作为。【参考方案6】:

您需要使用.format() 函数。

MM - 月份数

MMM - 月字

var date = moment("2014-02-27T10:00:00").format('DD-MM-YYYY');
var dateMonthAsWord = moment("2014-02-27T10:00:00").format('DD-MMM-YYYY');

FIDDLE

【讨论】:

现有的日期变量怎么样。 var date = moment("2014-02-27T10:00:00").format('DD-MM-YYYY'); var dateCalendarPart = moment(date).format('YYYY/MM/DD'); alert(date); alert(dateCalendarPart); 给出一个无效的日期错误?????? 尝试 ''var dateCalendarPart = moment(date,'YYYY/MM/DD');警报(日期); '' @AndrewDay ..."01-02-2017",“1 月 2 日”还是“2 月 1 日”? Momentjs 无法读懂你的想法。 此答案仅有效,因为 OP 的字符串采用标准日期格式。 Stephen Paul 的回答展示了如何将给定特定格式的任何字符串转换为可以操作的日期。 它返回字符串而不是 OP 要求的日期。奇怪的是它得到了支持。

以上是关于使用 moment.js 解析字符串到日期的主要内容,如果未能解决你的问题,请参考以下文章

Moment.js:moment(string,format)源码解析

Moment.js 和 Unix 纪元转换

使用 Moment.js 格式化日期

使用moment.js轻松管理日期和时间

格式化日期与moment.js

Node.js怎么处理数据库中日期类型