将MySql日期时间戳转换为JavaScript的日期格式
有谁知道我可以如何获取MySQL datetime
数据类型值,例如YYYY-MM-DD HH:MM:SS
,并解析它或将其转换为在JavaScript的Date()
函数中工作,例如: - Date('YYYY ,MM,DD,HH,MM,SS);将MySql日期时间戳转换为JavaScript的日期格式
谢谢!
一些这里给出的答案是要么过于复杂,或只是将无法正常工作(至少不是在所有浏览器)。如果退后一步,可以看到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时间(这是默认设置,并建议如果没有时区成分的字符串)。
在谷歌快速搜索提供这样的:
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]);
}
为什么不能做到这一点:
var d = new Date.parseDate("2000-09-10 00:00:00", 'Y-m-d H:i:s');
parseDate不是Date对象的JS方法。最终有一个静态分析方法,但它只接受1个参数。 – 2011-02-20 16:34:03
为了增加优秀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());
你应该使用'新日期(Date.UTC(...))'另外明智的答案是错误的长达24小时... – user3338098 2015-04-03 14:29:18
最新的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 ...
我们可以通过使用需要,因为毫秒为单位的构造函数创建一个新的JavaScript Date对象。该UNIX_TIMESTAMP函数返回秒以来的时代,所以我们需要用1000乘以:
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
结果值可以直接使用实例化一个正确的JavaScript Date对象:
var myDate = new Date(<?=$row['stamp']?>);
希望这有助于。
是的,高效的简单方法。但是,我会将unix时间戳的乘法(* 1000)推到客户端(在JavaScript中) – Reinsbrain 2014-04-22 20:52:09
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]);
+1,因为它没有引发正则表达式。 (现在,如果我们可以将它变成一个在线手册并摆脱这些变量......) – T4NK3R 2014-07-13 05:38:12
要进一步添加到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)
从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;
};
});
嗨,并感谢jaym。这解决了我为ios构建的角度应用程序中的破损日期。 – mediaguru 2017-08-29 02:58:42
首先,你可以通过拆分YMD格式转换成组件给JavaScript的Date对象(类),用于将MySQL的YMD日期格式转换为JavaScript格式的新方法“fromYMD()”和使用这些日期组件:
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世界funcion):
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只需要几秒钟。
然后,在做完所有这些之后,我发现Javascript日期没有简单的方法来添加日期... – 2016-07-13 21:04:04