javascript中的日期解析

时间:2011-01-25 09:09:14

标签: javascript

我需要在javascript中将 17Dec2010 的日期解析为javascript日期。 怎么做?

4 个答案:

答案 0 :(得分:3)

简短的回答是:JavaScript中没有标准手段可以做到这一点,你必须自己做。 JavaScript最近才获得日期的任何标准字符串表示形式(截至ECMAScript第5版,大约一年前 - 格式是ISO-8601的简化版本),并且您的格式不匹配格式。

但是,有一些附加库可以提供帮助,例如DateJS

您的特定格式很容易解析(见下文),但如果您进入变体,它可能会变得很复杂。

简单示例:

var months = {
    en: {
        "jan": 0,
        "feb": 1,
        "mar": 2,
        "apr": 3,
        "may": 4,
        "jun": 5,
        "jul": 6,
        "aug": 7,
        "sep": 8,
        "oct": 9,
        "nov": 10,
        "dec": 11
    }
};
var dateString = "17Dec2010";
var dt = new Date(
    parseInt(dateString.substring(5), 10),               // year
    months.en[dateString.substring(2, 5).toLowerCase()], // month
    parseInt(dateString.substring(0, 2), 10)             // day
);
alert(dt); // alerts "Fri Dec 17 2010 00:00:00 GMT+0000 (GMT)" or similar

Live example

...但是它只处理英语(因此en的{​​{1}}属性),而且它可以很快地复杂化。


mplungjan非常正确地指出上面会失败,比如“7Dec2010”。这是一个更灵活的版本,但同样,如果格式有任何变化,我可能会看一个库:

months

Live example

答案 1 :(得分:1)

使用Crowder的regExp而不是我第一次回答时提出的那个,不需要一个月的数组。我的脚本在IE8,Fx 3.6,Opera 10,Safari 5,Mozilla 1.7和Windows和Blackberry本机浏览器上进行了测试。如果你的字符串的月份部分是英语,那么所有主流浏览器,甚至一些不那么重要的浏览器 - 我希望所有支持javascript和Date.parse支持的浏览器都可以正常处理我的脚本。 MDC说Date.parse做RFC822

<script type="text/javascript">
var date = "12Dec2011"
var reg = /^(\d+)(\D+)(\d+)$/
var parts = reg.exec(date)
var dateString = parts[1]+' '+parts[2]+' '+parts[3]; // parts[0] is the match itself
alert(new Date(Date.parse(dateString)))
</script>

答案 2 :(得分:0)

基于Python的utility I wrote模块,这是一个很小的(一旦你拿出评论,至少)time - 它需要格式字符串并相应地生成RegExps来提取日期信息。 unit tests给出了它的功能而无需查看代码,但在您的情况下:

>>> var parts = time.strptime('17Dec2010', '%d%b%Y');
>>> var date = new Date(parts[0], parts[1]-1, parts[2]);
Fri Dec 17 2010 00:00:00 GMT+0000 (GMT Standard Time) {}

它还会处理基本验证:

>>> try
... {
...     time.strptime('32Dec2010', '%d%b%Y');
... }
... catch (e)
... {
...     console.log(e);
... }
Error: Day is out of range: 32

如果你需要,也可以采取其他方式:

>>> time.strftime(date, '%d%b%Y');
"17Dec2010"

答案 3 :(得分:0)

Date JS太棒了。