将 dd-MMM-YYYY 格式的日期转换为 JS 中的日期或 dd/mm/yyyy 格式
Posted
技术标签:
【中文标题】将 dd-MMM-YYYY 格式的日期转换为 JS 中的日期或 dd/mm/yyyy 格式【英文标题】:converting a date in format dd-MMM-YYYY to date or dd/mm/yyyy format in JS 【发布时间】:2016-05-20 07:53:27 【问题描述】:我需要将 dd-MMM-YYYY 或 dd/mm/yyyy(两种格式都可能)显示的日期转换为 JavaScrpit 中的正常毫秒。我最初使用 datePicker 但不支持格式 dd-MMM-YYYY 。有没有其他方法可以在不使用 moment.js 的情况下做到这一点?
我使用过的代码:
function parseDate(input)
var map =
Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5,
Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11
;
input = input.split('-');
return (new Date(input[2], map[input[1]], input[0]));
【问题讨论】:
我编写了一个函数来解析日期,以防它的格式为 dd-MMM-YYYY 。但我正在寻找是否有更好的方法来做到这一点。 如果你分享你尝试过的代码,建议和帮助会很容易。 为我以 dd-MMM-YYYY 格式解析日期的部分添加了代码 你可以用几千行moment.js来替换你的小函数,但是为什么呢?解析 dd/mm/yyyy 更加简单。您可以使用split(/[-\/]/)
和 map[input[1]] || input[1] - 1
在函数中包含这两种格式
【参考方案1】:
这行得通:
function parseDate(input)
var map = jan: 1, feb: 2, mar: 3, apr: 4, may: 5, jun: 6,
jul: 7, aug: 8, sep: 9, oct: 10, nov: 11, dec: 12;
input = input.split(/[-\/]/);
alert(map[input[1].toLowerCase()]);
return new Date(input[2], (map[input[1].toLowerCase()] || input[1]) - 1, input[0]);
【讨论】:
【参考方案2】:您可以轻松修改解析函数以处理 dd-mmm-yyyy 和 d/m/y:
function parseDate(input)
var map = Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5,
Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11;
input = input.split(/[-\/]/);
return new Date(input[2], input[1] in map? map[input[1]] : input[1]-1, input[0]);
document.write(parseDate('10-Jan-2016') + '<br>' + parseDate('10/1/2016'))
虽然我会将月份名称设为小写并使用map[input[1].toLowerCase()]
以获得更大的兼容性(例如处理二月、二月和二月)。
【讨论】:
当月份为 Jan 时,此代码给出无效日期。我尝试更改日期 2016 年 1 月 10 日,但它给出了无效日期 糟糕,抱歉。对于 Jan,map[input[1]]
返回 0,这是错误的,因此 'Jan' 被传递给构造函数。现已修复。以上是关于将 dd-MMM-YYYY 格式的日期转换为 JS 中的日期或 dd/mm/yyyy 格式的主要内容,如果未能解决你的问题,请参考以下文章
将日期时间转换为dojo中dd-MMM-yyyy HH:MM的正确日期时间格式
如何将给定的字符串格式解析为 dd-MMM-yyyy hh:mm:ss:aa?
如何将日期格式“dd-MMM-yy”的字符串转换为DateType [重复]