2013-03-19 3 views
2

Как преобразовать строковое представление даты в настоящий объект даты javascript?convert custom date string to date object

дата имеет следующий формат

E MMM dd HH:mm:ss Z yyyy 

например,

Sat Jun 30 00:00:00 CEST 2012 

Заранее спасибо

EDIT: Мой рабочий раствор на основе принятого ответа. Чтобы заставить его работать в IE8, вы должны заменить месячную часть (например, июнь) на число месяцев (например, 5 на июнь, потому что январь равен 0)

+0

Анализировать, создать допустимую строку и вызовите конструктор Date. –

+0

Возможный дубликат: http://stackoverflow.com/questions/5510580/convert-string-to-datetime –

+0

и как мне обрабатывать «Z»? – Luke94

ответ

6

Строка даты может быть в основном проанализирована как есть CEST isn ' t действительный часовой пояс в ISO 8601, поэтому вам придется вручную заменить его на +0200.

Простое решение, таким образом, может быть:

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

Если вы хотите, чтобы поддерживать другие временные зоны, определенные по их именам, вы должны найти их возможные значения и соответствующие смещения. Вы можете зарегистрировать их в карте:

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.

+0

Протестировано в Firefox? Я помню, что firefox был довольно строгим, в какие даты он принимает. Однако он работает в Chrome. –

+1

Протестировано в Firefox и Chrome. –

+0

Можете ли вы проверить в IE тоже, или я должен? –

0

Вы можете использовать следующий код, чтобы преобразовать строку в 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);