将 MySqlDateTime 戳转换为 JavaScript 的 Date 格式

有人知道我如何获取 MySQL datetime数据类型值,比如 YYYY-MM-DD HH:MM:SS,并解析它或者将其转换为 JavaScript 的 Date()函数,例如:-Date (‘ YYYY,MM,DD,HH,MM,SS) ;

谢谢!

158345 次浏览

在谷歌上的快速搜索提供了以下信息:

 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

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

为什么不这样做:

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

除了优秀的 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;
}

通过这种方式,给出一个表格为 "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());

最新版本的 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);

我想我可能找到了一个更简单的方法,没人提到过。

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

SELECT unix_timestamp(my_datetime_column) as stamp ...

我们可以使用构造函数来创建一个新的 JavaScriptDate 对象,这个构造函数从开始到现在需要几毫秒的时间。Unix _ time戳函数返回自纪元以来的秒数,因此我们需要乘以1000:

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

生成的值可以直接用于实例化一个正确的 Javascript Date 对象:

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

希望这个能帮上忙。

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

为了进一步增加 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();

现代浏览器的一条线索(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)

来自 安迪的回答, 对于 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;
};
});

首先,你可以给 JavaScript 的 Date 对象(class)一个新的方法“ from YMD ()”,通过将 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');

您可以使用 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 时间戳字符串:

2018-07-1900:00:00

Date ()接收到的最接近时间戳的格式如下,因此将空格替换为“ T”:

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

“2011-10-10 T14:48:00”

然后,创建 date 对象:

var date = new Date(dateString);

Result 将是 date 对象:

2018年7月19日星期四00:00:00 gMT-0300(巴西利亚)

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

 parseDate(date){
const formated = new Date(date)
         

return `${formated.getFullYear()}/${formated.getMonth()}/${formated.getDay()}`;
},

如何在 Javascript 中操作 MySQL 时间戳

我今天必须正确处理这个话题

所以我混合了两个我想分享的函数

function mysqlDatetoJs(mysqlTimeStamp){
var t = mysqlTimeStamp.split(/[- :]/);
return new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
}

然后

function prettyDate(date) {
var months =  ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu',
'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'];


return date.getUTCDate() + ' ' + months[date.getUTCMonth()]
+ ' ' + date.getUTCFullYear();
}

我已经用它来建立一个像这样的动态表

td.innerHTML = prettyDate(mysqlDatetoJs(array[i].data));

结果在 TD 中打印出日期

4 Set 2021

给定数组[ i ]。Data 是来自 MySQL 表的日期记录,特别是对于这个答复,它以表单的形式出现

2021-09-04 11:25:20

希望能派上用场

虽然我已经找到了一个干净的日期()在这个页面的解释 Https://www.digitalocean.com/community/tutorials/understanding-date-and-time-in-javascript