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

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

Спасибо!

Ответ 1

Некоторые из приведенных здесь ответов слишком сложны или просто не будут работать (по крайней мере, не во всех браузерах). Если вы сделаете шаг назад, вы увидите, что временная метка 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 (который является значением по умолчанию и рекомендуется, если нет компонента часовой пояс строки).

Ответ 2

Чтобы добавить отличный ответ Andy 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());

Ответ 3

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

Столбец 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']?>);

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

Ответ 4

Один вкладыш для современных браузеров (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)

Ответ 5

В последних версиях 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);

Ответ 6

Добавить еще дальше в решение Marco. Я прототипировал непосредственно в объект 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();

Ответ 7

От Andy Answer, Для 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;
            };
        });

Ответ 8

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]);

Ответ 9

Сначала вы можете указать JavaScript Date object (class) новый метод '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);
};

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

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

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

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

Ответ 10

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

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;

Затем получите epoch_time в JavaScript, и это простой вопрос:

var myDate = new Date(epoch_time * 1000);

Умножение на 1000 происходит из-за того, что JavaScript занимает миллисекунды, а UNIX_TIMESTAMP дает секунды.

Ответ 11

Быстрый поиск в google при условии:

 function mysqlTimeStampToDate(timestamp) {
    //function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
  }

Источник: http://snippets.dzone.com/posts/show/4132

Ответ 12

Почему бы не сделать это:

var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );