将MySql DateTime标记转换为JavaScript的日期格式

时间:2010-06-19 13:06:28

标签: javascript jquery mysql datetime

有谁知道我如何获取MySQL datetime数据类型值,例如YYYY-MM-DD HH:MM:SS并解析它或将其转换为在JavaScript的Date()函数中工作,例如: - 日期('YYYY,MM,DD,HH,MM,SS);

谢谢!

13 个答案:

答案 0 :(得分:396)

这里给出的一些答案要么过于复杂,要么不起作用(至少在所有浏览器中都不行)。如果退后一步,您可以看到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日期(这是默认值,如果字符串没有时区组件,则建议使用)。

答案 1 :(得分:60)

要添加到优秀的Andy E answer,常用的功能可以是:

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

以这种方式给出"YYYY-MM-DD HH:MM:SS"形式的MySQL日期/时间,甚至是简短形式(仅限日期)"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());

答案 2 :(得分:28)

我想我可能找到了一种更简单的方式,没有人提到过。

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 ...

结果值可以直接用于实例化正确的Javascript Date对象:

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

希望这有帮助。

答案 3 :(得分:14)

现代浏览器的一个衬垫(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)

答案 4 :(得分:7)

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

答案 5 :(得分:2)

进一步添加到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();

答案 6 :(得分:2)

来自Andy's 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;
            };
        });

答案 7 :(得分:1)

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

答案 8 :(得分:1)

首先,您可以为JavaScript的Date对象(类)提供新方法&#39; fromYMD()&#39;通过将YMD格式拆分为组件并使用这些日期组件,将MySQL的YMD日期格式转换为JavaScript格式:

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

答案 9 :(得分:1)

有一种更简单的方法,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);

结果将是日期对象:

  

2018年7月19日星期四00:00:00 GMT-0300(巴西利亚霍拉里奥帕德朗)

答案 10 :(得分:1)

在将字符串日期提供给 Date 对象之前,您可以使用 Js Date() 方法构建这样的布局:

 parseDate(date){
         const formated = new Date(date)
         
         return `${formated.getFullYear()}/${formated.getMonth()}/${formated.getDay()}`;
     },

答案 11 :(得分:-2)

谷歌快速搜索提供了这个:

 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 :(得分:-3)

为什么不这样做:

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