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

dzm*_*dzm 157 javascript mysql jquery datetime

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

谢谢!

And*_*y E 407

这里给出的一些答案要么过于复杂,要么不起作用(至少在所有浏览器中都不行).如果退后一步,可以看到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)
Run Code Online (Sandbox Code Playgroud)

公平警告:这假设您的MySQL服务器正在输出UTC日期(这是默认值,如果字符串没有时区组件,则建议使用).

  • 呃mysql使用一个时区,而javascript Date构造函数只接受本地时区,因此最多24小时使这个解决方案错误...`new Date(Date.UTC(...))`更好,但是假设mysql使用utc ...这两种方式都需要考虑才能被认为是正确的答案. (3认同)
  • 非常感谢您提供这个优雅的解决方案!我不得不使用它,因为Safari似乎无法从MySQL时间戳字符串中自动生成Date对象,例如.`var d = new Date("2010-06-09 13:12:01");`.虽然有趣的是,Chrome没有任何问题. (2认同)

Mar*_*aio 62

为了增加优秀的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;   
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式给出表格中的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());
Run Code Online (Sandbox Code Playgroud)

  • 你应该使用`new Date(Date.UTC(...))`其他明智的答案是错误的,最多24小时...... (2认同)

Sym*_*ans 29

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

MySQL DATETIME列可以通过以下方式转换为unix时间戳:

SELECT unix_timestamp(my_datetime_column) as stamp ...
Run Code Online (Sandbox Code Playgroud)

我们可以使用自纪元以来需要毫秒的构造函数来创建一个新的JavaScript Date对象.unix_timestamp函数返回自纪元以来的秒数,因此我们需要乘以1000:

SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
Run Code Online (Sandbox Code Playgroud)

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

var myDate = new Date(<?=$row['stamp']?>);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 是的,有效的简单方法.但是,我会将unix时间戳的乘法(*1000)推送到客户端(在javascript中) (3认同)

ale*_*emb 16

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

只是为了好玩,这里有一个可以在旧版浏览器中使用的单行程序(现已修复):

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)
Run Code Online (Sandbox Code Playgroud)


Jef*_*eff 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);
Run Code Online (Sandbox Code Playgroud)