简体   繁体   English

将自定义日期字符串转换为日期对象

[英]convert custom date string to date object

How can I convert a string representation of a date to a real javascript date object? 如何将日期的字符串表示形式转换为真正的javascript日期对象?

the date has the following format 日期具有以下格式

E MMM dd HH:mm:ss Z yyyy

eg 例如

Sat Jun 30 00:00:00 CEST 2012

Thanks in advance 提前致谢

EDIT: My working solution is based on the accepted answer. 编辑:我的工作解决方案是基于公认的答案。 To get it work in IE8, you have to replace the month part (eg Jun) with the months number (eg 5 for June, because January is 0) 要使其在IE8中正常工作,您必须将月份部分(例如6月)替换为月份数(例如5表示6月,因为1月是0)

Your date string can mostly be parsed as is but CEST isn't a valid time zone in ISO 8601 , so you'll have to manually replace it with +0200 . 您的日期字符串基本上可以按原样进行解析,但CESTISO 8601中不是有效的时区,因此您必须手动将其替换为+0200

A simple solution thus might be : 因此,一个简单的解决方案可能是:

var str = "Sat Jun 30 00:00:00 CEST 2012";
str = str.replace(/CEST/, '+0200');
var date = new Date(str);

If you want to support other time zones defined by their names, you'll have to find their possible values and the relevant offset. 如果要支持由其名称定义的其他时区,则必须找到其可能的值和相关的偏移量。 You can register them in a map : 您可以在地图中注册它们:

var replacements = {
    "ACDT": "+1030",
    "CEST": "+0200",
    ... 
};
for (var key in replacements) str = str.replace(key, replacements[key]);
var date = new Date(str);

This might be a good list of time zone abbreviation. 这可能是时区缩写的一个很好的列表。

You can use following code to convert string into datetime: 您可以使用以下代码将字符串转换为日期时间:

var sDate = "01/09/2013 01:10:59";
 var dateArray = sDate.split('/');
 var day = dateArray[1];

 // Attention! JavaScript consider months in the range 0 - 11
 var month = dateArray[0] - 1;
 var year = dateArray[2].split(' ')[0];
 var hour = (dateArray[2].split(' ')[1]).split(':')[0];
 var minute = (dateArray[2].split(' ')[1]).split(':')[1];
 var objDt = new Date(year, month, day, hour, minute);
 alert(objDt);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM