it-roy-ru.com

Преобразование штампа MySql DateTime в формат даты JavaScript

Кто-нибудь знает, как я могу взять значение типа данных MySQL datetime, такое как YYYY-MM-DD HH:MM:SS, и либо проанализировать его, либо преобразовать для работы в функции JavaScript Date(), например: - Дата ('ГГГГ, ММ, ДД, ЧЧ, ММ, СС) ;

Спасибо!

147
dzm

Некоторые из приведенных здесь ответов либо слишком сложны, либо просто не будут работать (по крайней мере, не во всех браузерах). Если вы сделаете шаг назад, вы увидите, что метка времени MySQL имеет каждый компонент времени в том же порядке, что и аргументы, требуемые конструктором Date().

Все, что нужно, - это очень простое разбиение строки:

// Split timestamp into [ Y, M, D, h, m, s ]
var t = "2010-06-09 13:12:01".split(/[- :]/);

// Apply each element to the Date function
var d = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));

console.log(d);
// -> Wed Jun 09 2010 14:12:01 GMT+0100 (BST)

Справедливое предупреждение: это предполагает, что ваш сервер MySQL выводит даты UTC (это значение по умолчанию и рекомендуется, если в строке нет компонента часового пояса).

391
Andy E

Чтобы добавить к отличному Энди E ответ функция общего использования может быть:

Date.createFromMysql = function(mysql_string)
{ 
   var t, result = null;

   if( typeof mysql_string === 'string' )
   {
      t = mysql_string.split(/[- :]/);

      //when t[3], t[4] and t[5] are missing they defaults to zero
      result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);          
   }

   return result;   
}

Таким образом, учитывая дату/время MySQL в форме "YYYY-MM-DD HH:MM:SS" или даже краткую форму (только дата) "YYYY-MM-DD", вы можете сделать:

var d1 = Date.createFromMysql("2011-02-20");
var d2 = Date.createFromMysql("2011-02-20 17:16:00");
alert("d1 year = " + d1.getFullYear());
60
Marco Demaio

Я думаю, что, возможно, нашел более простой способ, который никто не упомянул.

Столбец MySQL DATETIME можно преобразовать в метку времени Unix с помощью:

SELECT unix_timestamp(my_datetime_column) as stamp ...

Мы можем создать новый объект JavaScript Date, используя конструктор, который требует миллисекунды с начала эпохи. Функция unix_timestamp возвращает секунды с начала эпохи, поэтому нам нужно умножить на 1000:

SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...

Полученное значение может быть использовано непосредственно для создания экземпляра правильного объекта Date Javascript:

var myDate = new Date(<?=$row['stamp']?>);

Надеюсь это поможет.

28
Symen Timmermans

Один лайнер для современных браузеров (IE10 +):

var d = new Date(Date.parse("2010-06-09 13:12:01"));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)

И просто для удовольствия, вот одна строка, которая будет работать в старых браузерах (теперь исправлена):

new (Function.prototype.bind.apply(Date, [null].concat("2010-06-09 13:12:01".split(/[\s:-]/)).map(function(v,i){return i==2?--v:v}) ));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)
13
aleemb

В последних версиях JavaScript будет считываться дата в формате ISO8601, поэтому все, что вам нужно сделать, это изменить пространство на «Т», выполнив что-то вроде одного из следующих:

#MySQL
select date_format(my_date_column,'%Y-%m-%dT%T') from my_table;

#PHP
$php_date_str = substr($mysql_date_str,0,10).'T'.substr($mysql_date_str,11,8);

//JavaScript
js_date_str = mysql_date_str.substr(0,10)+'T'+mysql_date_str.substr(11,8);
7
Jeff

Чтобы добавить еще дальше к решению Марко. Я прототипировал непосредственно к объекту String.

String.prototype.mysqlToDate = String.prototype.mysqlToDate || function() {
    var t = this.split(/[- :]/);
    return new Date(t[0], t[1]-1, t[2], t[3]||0, t[4]||0, t[5]||0);
};

Таким образом, вы можете перейти непосредственно к:

var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
2
Adrian Bartholomew

От Ответ Энди , Для AngularJS - Фильтр

angular
    .module('utils', [])
.filter('mysqlToJS', function () {
            return function (mysqlStr) {
                var t, result = null;

                if (typeof mysqlStr === 'string') {
                    t = mysqlStr.split(/[- :]/);

                    //when t[3], t[4] and t[5] are missing they defaults to zero
                    result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
                }

                return result;
            };
        });
2
jaym

Существует более простой способ, строка времени sql: 

2018-07-19 00:00:00

Ближайший формат к метке времени для Date () для получения следующий, поэтому замените пробел на «T»:

var dateString = media.intervention.replace(/\s/g, "T");

"2011-10-10T14: 48: 00"

Затем создайте объект даты:

var date = new Date(dateString);

результатом будет объект даты:

Чт 19 июля 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)

1
Caique Matos
var a=dateString.split(" ");
var b=a[0].split("-");
var c=a[1].split(":");
var date = new Date(b[0],(b[1]-1),b[2],b[0],c[1],c[2]);
1
bhowden

Во-первых, вы можете дать объекту Date класса (классу) JavaScript новый метод fromYMD () для преобразования формата даты YMD в MySQL в формат JavaScript путем разделения формата YMD на компоненты и использования этих компонентов даты:

Date.prototype.fromYMD=function(ymd)
{
  var t=ymd.split(/[- :]/); //split into components
  return new Date(t[0],t[1]-1,t[2],t[3]||0,t[4]||0,t[5]||0);
};

Теперь вы можете определить свой собственный объект (функция в мире JavaScript):

function DateFromYMD(ymd)
{
  return (new Date()).fromYMD(ymd);
}

и теперь вы можете просто создать дату из формата даты MySQL;

var d=new DateFromYMD('2016-07-24');
1
sbrbot

Вы можете использовать метку времени Unix для направления:

SELECT UNIX_TIMESTAMP(date) AS Epoch_time FROM table;

Затем добавьте Epoch_time в JavaScript, и это просто вопрос:

var myDate = new Date(Epoch_time * 1000);

Умножение на 1000 объясняется тем, что JavaScript занимает миллисекунды, а UNIX_TIMESTAMP - секунды.

0
bharat