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

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

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

【问题讨论】:

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

标签: javascript mysql date


【解决方案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);
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 2021-06-07
                      • 1970-01-01
                      • 2011-03-05
                      • 2011-08-13
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-04-27
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多