Конвертируйте марку MySql DateTime в формат даты JavaScript - PullRequest
153 голосов
/ 19 июня 2010

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

Спасибо!

Ответы [ 13 ]

397 голосов
/ 19 июня 2010

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

61 голосов
/ 20 февраля 2011

Чтобы добавить к превосходному Энди 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());
28 голосов
/ 20 ноября 2013

Думаю, я нашел более простой способ, который никто не упомянул.

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

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

15 голосов
/ 10 июля 2015

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

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

2 голосов
/ 01 мая 2016

С Ответ Энди , Для 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 голосов
/ 02 ноября 2014

Чтобы еще больше добавить решение Марко.Я создал прототип непосредственно для объекта 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();
1 голос
/ 05 июля 2018

Существует более простой способ, строка метки времени 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 голос
/ 24 июля 2016

Сначала вы можете дать объекту 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 голос
/ 27 марта 2014
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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...