2015-09-08 4 views
0

Мне нужно было преобразовать строку в UTC, а затем UTC date to local date.Javascript Date time String to UTC date time и UTC to Local Date time

вот мой код:

var dateStr = "9/8/2015 12:44:00 PM"; 
console.log(strtoUTCtoLocal(dateStr)); 

function strtoUTCtoLocal(dateStr) 
{ 
    var d1 = new Date(dateStr).toUTCString(); 
    var d2= new Date(d1); 

    return  "0" + (d2.getMonth()+1).toString().slice(-2) + "/" + 
       "0" + d2.getDate().toString().slice(-2) + "/" + 
       d2.getFullYear().toString() + " " + 
       d2.getHours().toString() + ":" + 
       d2.getMinutes().toString(); 
} 

ответ

3

Синхронизирующие строки должны быть выполнены вручную с Date.parse является непоследовательным в разных браузерах. Если предположить, что формат является d/м/г, вы можете разобрать его на время UTC, используя следующее:

var s = '9/8/2015 12:44:00 PM'; 
 

 
    function parseDate(s) { 
 
     var b = s.split(/\D+/); 
 
     var ap = /pm$/i.test(s)? 12 : 0; 
 
     return new Date(Date.UTC(b[2], b[1]-1, b[0], ((b[3]%12) + ap), b[4], b[5])); 
 
    } 
 

 
    document.write(parseDate(s));

Если вам необходимо проверить дату, вам потребуется дополнительная строка кода.

Обратите внимание, что по умолчанию строки без часового пояса обычно анализируются как локальные (за исключением строк формата ISO 8601 в ES5 с использованием Date.parse, но ECMAScript 2015 анализирует их как локальные, которые были изменены на UTC с ECMAScript 2016).

+0

Время и цвет, две вещи, которые кажутся достаточно легкими на поверхности. – Joe

+0

Объекты Date ECMAScript на самом деле действительно просты, они всего лишь значение времени UTC и множество удобных методов. Единственный трюк касается локального часового пояса, но это не проблема объекта Date. ;-) – RobG

1

Я бы рекомендовал проверить momentjs (http://momentjs.com/). Это потрясающая библиотека, которая обрабатывает всевозможные операции с датами, подобные этому.

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