2014-02-04 3 views
-5

Как бы я взять строку в следующем формате:дата форматирования в Javascript

2014-06-12T23:00:00 

и отформатировать его в Javascript, чтобы выглядеть следующим образом:

12/06/2014 23:00 
+2

Рассматривали вы используете библиотеку, например: http://momentjs.com/ – Oleg

+4

использовать некоторые подстроки старые-моды метод, быстрый и грязный. – Ismael

+1

Многочисленные ответы здесь на SO http://stackoverflow.com/questions/21516995/create-another-formated-date-string-from-an-iso8601-timestamp – Xotic750

ответ

0

Использование Javascript встроенных методов Дата:

function getDateString() { 
    var d = new Date('2014-06-12T23:00:00'); // pass in your date string 
    var y = d.getFullYear(); // the full year (4 digits) 
    var m = d.getMonth() + 1; // 0-based month 

    var dt = d.getDate() + 1;  // 0-based day of the month 
    dt = dt < 10 ? '0' + dt : dt; // add a preceding 0 to numbers less than 10  

    var h = d.getHours();  // 0-based hours 
    h = h < 10 ? '0' + h : h; // add a preceding 0 to numbers less than 10 

    var mn = d.getMinutes();  // minutes 
    mn = mn < 10 ? '0' + mn : mn; // add a preceding 0 to numbers less than 10 

    return m + '/' + dt + '/' + y + ' ' + h + ':' + mn; 
} 
+0

К сожалению, я просто понял, что не полностью прочитал ваш ответ: ]. С первой строкой даты передайте это в новый объект Date, а затем продолжайте, как я показал: var date = new Date («2014-06-12T23: 00: 00») ;. Обратите внимание, что это даст вам время по Гринвичу, поэтому, например, для тихоокеанского часового пояса, это будет показывать время как GMT-0800, или на 8 часов меньше, чем время, которое решает новый объект даты. Вы можете определить смещение часовой пояс GMT и добавить или вычесть это на свой объект Date, после чего THEN продолжит. –

+0

Пришлось внести несколько незначительных изменений в это (getDate(), а не getDate() + 1 был основным), но он отлично работает, спасибо! – user517406

+0

Удивительный, рад, что я мог бы помочь. Удачи друг другу. –

1

, как @ Xotic750 poited вне это все о разборе ISO8601 метки:

formatMyDate = function(dt, dayFirst){ 
    var year = dt.getFullYear().toString(); 
    //month starts from zero 
    var month = (dt.getMonth()+1).toString(); 
    var date = dt.getDate().toString(); 
    var result = null; 
    if(dayFirst) 
     result = (date[1]?date:"0"+date[0]) + "/" + (month[1]?month:"0"+month[0]); 
    else 
     result = (month[1]?month:"0"+month[0]) + "/" + (date[1]?date:"0"+date[0]); 
    result += "/" + year + " " + dt.toTimeString().split(" ")[0]; 
    return result; 
} 
parseUTCTimestamp = function(dtstr) { 
    var dt = null; 
    var dtArr = dtstr.split(/[\-T:]/); 
    dt = new Date(Date.UTC(parseInt(dtArr[0]), dtArr[1]-1, parseInt(dtArr[2]), parseInt(dtArr[3]), parseInt(dtArr[4]), parseInt(dtArr[5]))); 

    return formatMyDate(dt); 
}; 
parseTimestamp = function(dtstr) { 
    var dt = null; 
    var dtArr = dtstr.split(/[\-T:]/); 
    dt = new Date(parseInt(dtArr[0]), dtArr[1]-1, parseInt(dtArr[2]), parseInt(dtArr[3]), parseInt(dtArr[4]), parseInt(dtArr[5])); 

    return formatMyDate(dt, true); 
}; 

parseUTCTimestamp("2014-06-12T23:00:00");//-->"06/13/2014 03:30:00" 

parseTimestamp("2014-06-12T23:00:00");//-->"12/06/2014 23:00:00" 
+0

Анализ временной маркировки ISO8601 поддерживается только в новых браузерах, поддерживающих ECMA5, и даже тогда он попадает и промахивается (как и любой синтаксический анализ строки даты и времени). Также метка времени указана в формате UTC не локально. – Xotic750

+0

См. ['Date.UTC'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC) – Xotic750

+0

@ Xotic750: спасибо, что указали это, это круто сейчас? –

0

В этом случае может быть проще, чтобы избежать Date объекта в целом и, как предложил @Ismael, использовать прямой манипуляции со строками.

Javascript

var dateStamp = '2014-06-12T23:00:00', 
    dateTime = dateStamp.split('T'), 
    date = dateTime[0].split('-'), 
    time = dateTime[1].split(':'), 
    formatted = date.reverse().join('/') + ' ' + time.slice(0, -1).join(':'); 

console.log(formatted); 

Выход

12/06/2014 23:00 

На jsFiddle

Смежные вопросы