我需要在javascript中将 17Dec2010 的日期解析为javascript日期。 怎么做?
答案 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
...但是它只处理英语(因此en
的{{1}}属性),而且它可以很快地复杂化。
mplungjan非常正确地指出上面会失败,比如“7Dec2010”。这是一个更灵活的版本,但同样,如果格式有任何变化,我可能会看一个库:
months
答案 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太棒了。