将 JS 日期时间转换为 MySQL 日期时间

IT技术 javascript mysql
2021-01-15 12:27:05

有谁知道如何将 JS 日期时间转换为 MySQL 日期时间?还有一种方法可以将特定的分钟数添加到 JS 日期时间,然后将其传递给 MySQL 日期时间吗?

6个回答
var date;
date = new Date();
date = date.getUTCFullYear() + '-' +
    ('00' + (date.getUTCMonth()+1)).slice(-2) + '-' +
    ('00' + date.getUTCDate()).slice(-2) + ' ' + 
    ('00' + date.getUTCHours()).slice(-2) + ':' + 
    ('00' + date.getUTCMinutes()).slice(-2) + ':' + 
    ('00' + date.getUTCSeconds()).slice(-2);
console.log(date);

甚至更短:

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

输出:

2012-06-22 05:40:06

对于更高级的用例,包括控制时区,请考虑使用http://momentjs.com/

require('moment')().format('YYYY-MM-DD HH:mm:ss');

对于轻量级的替代品 ,考虑https://github.com/taylorhakes/fecha

require('fecha').format('YYYY-MM-DD HH:mm:ss')
由于时区,这会产生问题
2021-03-14 12:27:05
它丢弃了时区设置,如何保留它?
2021-03-14 12:27:05
时区 oneliner 的完整解决方法!! var d = new Date(); d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
2021-03-15 12:27:05
在 date.getUTCDate 之前有一个额外的左括号,是的,这样更好。
2021-03-18 12:27:05
将其与此结合以处理时区:stackoverflow.com/questions/11887934/...
2021-03-28 12:27:05

我认为使用 method 解决方案可以不那么笨拙toISOString(),它具有广泛的浏览器兼容性。

所以你的表达将是一个单行:

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

生成的输出:

“2017-06-29 17:54:04”

太好了,这里只有一个问题:更笨拙的方法将应用 jsDate时区偏移获取小时、日、月(甚至年)而您的以 MySQL DATETIME 格式返回基础 UTC 时间。在大多数情况下,存储 UTC 可能会更好,在任何一种情况下,您的数据表都应该在一个字段中提供位置信息。或者,转换为本地时间非常简单:使用... - Date.getTimezoneOffset() * 60 * 1000(注意,在适用的情况下也会针对夏令时进行调整)。
2021-03-14 12:27:05
工作出色! new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
2021-03-21 12:27:05

虽然 JS 确实拥有足够的基本工具来做到这一点,但它非常笨重。

/**
 * 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();
}

/**
 * …and then create the method to output the date string as desired.
 * Some people hate using prototypes this way, but if you are going
 * to apply this to more than one Date object, having it as a prototype
 * makes sense.
 **/
Date.prototype.toMysqlFormat = function() {
    return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds());
};
@Catfish 你的意思是有一个特定的日期?你使用一个Date对象。new Date().toMysqlFormat()new Date(2014,12,14).toMysqlFormat()或什么。
2021-03-17 12:27:05
这个答案在 JavaScript 陈旧而笨拙的时候就出现了。如果您的目标是现代浏览器,我推荐Gajus 的toISOString方法
2021-03-29 12:27:05
你如何用变量调用这样的函数?
2021-04-12 12:27:05

MySQL 的 JS 时间值

var datetime = new Date().toLocaleString();

或者

const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );

或者

const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD  HH:mm:ss.000' );

你可以在 params 中发送它,它会起作用。

toLocaleString() 取决于语言环境。可能有些地方和mysql一样,但一般来说确实不是一个好方法
2021-04-05 12:27:05

对于任意日期字符串,

// Your default date object  
var starttime = new Date();
// Get the iso time (GMT 0 == UTC 0)
var isotime = new Date((new Date(starttime)).toISOString() );
// getTime() is the unix time value, in milliseconds.
// getTimezoneOffset() is UTC time and local time in minutes.
// 60000 = 60*1000 converts getTimezoneOffset() from minutes to milliseconds. 
var fixedtime = new Date(isotime.getTime()-(starttime.getTimezoneOffset()*60000));
// toISOString() is always 24 characters long: YYYY-MM-DDTHH:mm:ss.sssZ.
// .slice(0, 19) removes the last 5 chars, ".sssZ",which is (UTC offset).
// .replace('T', ' ') removes the pad between the date and time.
var formatedMysqlString = fixedtime.toISOString().slice(0, 19).replace('T', ' ');
console.log( formatedMysqlString );

或单线解决方案,

var formatedMysqlString = (new Date ((new Date((new Date(new Date())).toISOString() )).getTime() - ((new Date()).getTimezoneOffset()*60000))).toISOString().slice(0, 19).replace('T', ' ');
console.log( formatedMysqlString );

在 mysql 中使用时间戳时,此解决方案也适用于 Node.js。

@Gajus Kuizinas 的第一个答案似乎修改了 mozilla 的 toISOString 原型