Конвертировать в MySQL метка даты и времени на дата в JavaScript формате



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



спасибо!

635   13  

13 ответов:

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

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

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

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

столбец MySQL DATETIME может быть преобразован в метку времени unix через:

SELECT unix_timestamp(my_datetime_column) as stamp ...

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

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

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

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

надеюсь, что это помогает.

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

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

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

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

С Энди, Для AngularJS-Filter

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

сначала вы можете дать объекту даты JavaScript (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);
};

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

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

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

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

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

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;

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

var myDate = new Date(epoch_time * 1000);

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

есть более простой способ, sql timestamp string:

2018-07-19 00:00:00

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

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

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

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

var date = new Date(dateString);

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

чт 19 июля 2018 00:00: 00 GMT-0300 (Horário Padrão de Бразилиа)

быстрый поиск в 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,"     ").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
  }

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

почему бы не сделать так:

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

Comments

    Ничего не найдено.