将 mySQL 日期转换为 Javascript 日期

Posted

技术标签:

【中文标题】将 mySQL 日期转换为 Javascript 日期【英文标题】:Convert a mySQL date to Javascript date 【发布时间】:2010-12-18 11:00:03 【问题描述】:

mysql 日期格式日期转换为 javascript Date 对象的最佳方法是什么?

mySQL 日期格式为 'YYYY-MM-DD'(ISO 格式)。

【问题讨论】:

您有具体问题吗?你都尝试了些什么? AA您在将日期传递给 javascript Date 对象时遇到问题吗? Date.parse('2009-01-01');不起作用。试图找到一种方法来转换它。日期来自另一家公司的 json 对象,该对象以 ISO 格式返回日期。 【参考方案1】:

鉴于您已澄清不能更改传入日期的格式,您需要这样的内容:

var dateParts = isoFormatDateString.split("-");
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0,2));

原始回复:

您无法获得时间戳而不是日期字符串是否有原因?这将通过以下方式完成:

 SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;

然后将 epoch_time 导入到 JavaScript 中,就很简单了:

var myDate = new Date(epoch_time * 1000);

乘以 1000 是因为 JavaScript 需要毫秒,而 UNIX_TIMESTAMP 是秒。

【讨论】:

我无权更改数据返回给我的方式。我有一个 ISO 格式的日期,我需要在客户端对其进行转换。【参考方案2】:

最短快速的方法:

var mySQLDate = '2015-04-29 10:29:08';
new Date(Date.parse(mySQLDate.replace(/-/g, '/')));

【讨论】:

对我不起作用。我将替换语句更改为:replace(/[-]/g,'/')【参考方案3】:

mySqlDate 的格式为“yyyy-mm-dd”。

var javaDate = new Date(mySqlDate);

这行代码对我来说很好用。

【讨论】:

这不适用于公元 100 年之前的日期。【参考方案4】:

UNIX timestamp(自 1970 年 1 月 1 日以来的毫秒数)将是我的首选。

您可以将它作为整数传递,并使用 JS setTime() 方法从中生成 JS Date 对象。

【讨论】:

【参考方案5】:

偶然发现这个希望完全符合 OP 的要求,并使用了 jhurshman 的答案,所以我 +1 了它,但它不完整,因为它将使用 00:00:00 GMT-0500 (CDT) 作为时间部分,因为它没有传递到日期对象(var jsDate)。

如果其他人想要创建完整的 Javascript date object

例如:

Sat Mar 29 2014 23:24:28 GMT-0500 (CDT)

基于 MySQL DATETIME 格式

例如:

'9999-12-31 23:59:59'.

您将需要使用以下内容:

var dateParts = isoFormatDateString.split("-");
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0, 2), dateParts[2].substr(3, 2), dateParts[2].substr(6, 2), dateParts[2].substr(9, 2));

它会在您创建日期对象时返回浏览器当前时区,但在大多数情况下我会在后端进行时区转换。

【讨论】:

【参考方案6】:

以 AngularJS 方式,感谢@Jonas Sciangula Street

.filter('toJSDate', function()
        return function (dateString) 
            return new Date(Date.parse(dateString.replace('-','/','g')))
        ;
    )

【讨论】:

【参考方案7】:

现在 javascript 可以轻松做到这一点,不再需要 moment.js 或类似的 :) 人类可读的语言和所需的语言。

var MySQLDate = '2021-01-26 16:35:00';

var JavaScriptDate1 = new Date(MySQLDate).toLocaleDateString(
      'es-CO',
      
        year: 'numeric',
        month: 'long',
        day: 'numeric',
        hour12: true,
        hour: '2-digit',
        minute: '2-digit'
      
);
var JavaScriptDate2 = new Date(MySQLDate).toLocaleDateString(
      'ko-KR',
      
        year: 'numeric',
        month: 'long',
        day: 'numeric',
        hour12: false,
        hour: '2-digit',
        minute: '2-digit'
      
);

console.log(JavaScriptDate1);
console.log(JavaScriptDate2);

See more info here

【讨论】:

【参考方案8】:

您可以将日期'-'作为分隔符并使用此构造函数:

var d = new Date(Y, M - 1, D);

【讨论】:

我该如何拆分它? 如果 ds = 'YYYY-MM-DD': ds.split('-')【参考方案9】:

以 Jhurisman 的回答为基础。如果您还想设置日期时间,请使用以下命令:

var dateParts = mysqlDate;
var timeParts = dateParts[2].substr(3).split(":");

var jsDate = new Date(
                dateParts[0],
                dateParts[1] - 1,
                dateParts[2].substr(0,2),
                timeParts[0],
                timeParts[1],
                timeParts[2]
            );

【讨论】:

【参考方案10】:

也许是这样的?

[Y,M,D,h,m,s] = '2020-11-06 16:00:00'.split(/[- :]/)

【讨论】:

【参考方案11】:

这里是转换时间格式的函数。

function sqlToJsDate(sqlDate)
    //sqlDate in SQL DATETIME format ("yyyy-mm-dd hh:mm:ss.ms")
    var sqlDateArr1 = sqlDate.split("-");
    //format of sqlDateArr1[] = ['yyyy','mm','dd hh:mm:ms']
    var sYear = sqlDateArr1[0];
    var sMonth = (Number(sqlDateArr1[1]) - 1).toString();
    var sqlDateArr2 = sqlDateArr1[2].split(" ");
    //format of sqlDateArr2[] = ['dd', 'hh:mm:ss.ms']
    var sDay = sqlDateArr2[0];
    var sqlDateArr3 = sqlDateArr2[1].split(":");
    //format of sqlDateArr3[] = ['hh','mm','ss.ms']
    var sHour = sqlDateArr3[0];
    var sMinute = sqlDateArr3[1];
    var sqlDateArr4 = sqlDateArr3[2].split(".");
    //format of sqlDateArr4[] = ['ss','ms']
    var sSecond = sqlDateArr4[0];
    var sMillisecond = sqlDateArr4[1];
     
    return new Date(sYear,sMonth,sDay,sHour,sMinute,sSecond,sMillisecond);
```

Reference:[DeepInTheCode][1]


  [1]: https://deepinthecode.com/2014/08/05/converting-a-sql-datetime-to-a-javascript-date/

【讨论】:

【参考方案12】:

你可以像这样简单的 javascript 获取 MySQL 日期(yyyy-mm-dd)

获取日期和时间

var date = new Date();    
date.toISOString().slice(0, 19).replace('T', ' '); 

只获取日期 yyyy-mm-dd

var date = new Date();
date.toISOString().slice(0, 10).replace('T', ' '); 

如果您发现日期值有任何变化,请添加您的时区,例如

var date = new Date(date+" GTM");  //for GMT time zone 

用你的代码调整它

【讨论】:

【参考方案13】:

虽然 JS 确实拥有足够的基本工具来做到这一点,但使用起来非常简单

/**
 * Ashu, You first need to create a formatting function to pad numbers to two digits…
 **/
function twoDigits(d) 
    if(0 <= d && d < 10) return "0" + d.toString();
    if(-10 < d && d < 0) return "-0" + (-1*d).toString();
    return d.toString();



Date.prototype.toMysqlFormat = function() 
    return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds());
;


var date = new Date();

document.getElementById("date").innerhtml = date;
document.getElementById("mysql_date").innerHTML = date.toMysqlFormat();
console.log(date.toMysqlFormat());
Simple date:<div id="date"></div>

Converted Mysql Fromat: <div id="mysql_date"></div>

【讨论】:

【参考方案14】:
function getJsDate(sqlDate)
    var returnValue;
    var timeString="00:00:00";
    try
        var dateArray=sqlDate.trim().split(" ");
        var dateString=dateArray[0];
        if(dateArray.length>1)timeString=dateArray[1];
        console.log(timeString);
        var yyyymmddArray=dateString.trim().split("-");
        var hhmmssArray=timeString.trim().split(":");
        returnValue = new Date(yyyymmddArray[0], (yyyymmddArray[1]-1), yyyymmddArray[2], hhmmssArray[0], hhmmssArray[1], hhmmssArray[2]);
    catch(err)
        console.log("Error: "+ err.message);
    
    return returnValue;

【讨论】:

虽然此代码可以回答问题,但提供有关其解决问题的方式和原因的信息可提高其长期价值。【参考方案15】:

具有正确类型的 TypeScript(无隐式字符串/int 对话):

/**
 * @example
 * mysql_date_to_js_date("2019-12-31");
 */
export function mysql_date_to_js_date(mysql_date: string) 
    var parts = mysql_date.split("-");
    if (parts.length != 3) 
        return undefined;
    
    var year = parseInt(parts[0]);
    var month = parseInt(parts[1]) - 1; // months indexes are zero based, e.g. 9 == Octobre
    var day = parseInt(parts[2]);
    return new Date(year, month, day);

【讨论】:

以上是关于将 mySQL 日期转换为 Javascript 日期的主要内容,如果未能解决你的问题,请参考以下文章

将MySql日期转换为本地化日期

如何在 JavaScript 中将时间戳转换为 MySQL DateTime?

如何将 Javascript 日期时间转换为 C# 日期时间?

使用 Javascript 将 Excel 日期序列号转换为日期

使用 Javascript 将 Excel 日期序列号转换为日期

如何将 solr 日期转换为 javascript 日期?