JavaScript日期变量为字符串输入返回错误的日期

时间:2020-03-03 09:20:59

标签: javascript date

我从Web服务接收到包含日期时间的字符串,该字符串的格式为dd/MMM/yyyy hh:mm:ss,无法更改Web服务输出以匹配此JavaScript应用程序的需求。

为简单起见,我将Web服务数据替换为具有以下值的硬编码字符串。

// The raw input from the web service
var dateOne = new Date("04/Mar/2020 08:00:00");// Invalid Date {}

// After .replace to make it valid
var dateTwo = new Date("04-Mar-2020 08:00:00");// Sat Mar 04 2000 10:00:00

dateOne无效(以前是有效的,但最近证明很困难)

dateTwo有效但不正确(根据时区,从8到10的时间更改是正确的,但我的时区不是过去20年)

如果有人能指出我正确的方向,将不胜感激。 预先谢谢你。

1 个答案:

答案 0 :(得分:2)

Unfortunatley从日期字符串中初始化日期(您的操作方式)为strongly discouraged

注意:由于浏览器的差异和不一致,强烈建议不要使用Date构造函数(和Date.parse(),以相同的方式)解析日期字符串。

  • 仅按惯例,对RFC 2822格式字符串的支持。
  • 对ISO 8601格式的支持的不同之处在于,仅日期的字符串(例如“ 1970-01-01”)被视为UTC,而不是本地。

但是,您可以使用momentJS

显式解析日期字符串。

const dateString = '04/Mar/2020 08:00:00';
const date = moment(dateString, 'DD/MMM/YYYY HH:mm:ss');
console.log(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>