关于日期选择器的格式问题,value-format

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于日期选择器的格式问题,value-format相关的知识,希望对你有一定的参考价值。

参考技术A 业务报错:

点击日期选择器会报错,报错信息是elementui内部封装的格式报错。

业务场景:

日期选择器v-model会另外提供一个默认日期,绑定了data内的value,在初始化时,value会被赋值,此时的格式要与el-date-picker的value-format的格式不同,所以报错了。

业务逻辑:

报错的原因:created时日期选择器value2的格式为yyyyMMdd,而日期选择器中value-format指定的格式时yyyy-MM-dd

PHP mysql插入日期格式

【中文标题】PHP mysql插入日期格式【英文标题】:PHP mysql insert date format 【发布时间】:2012-08-20 16:03:36 【问题描述】:

我正在使用 jQuery 日期选择器 日期选择器的格式是 08/25/2012

我在插入数据库时​​出错,它只插入 0000-00-00 00 00 00

我的代码是

<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>

我确定我的插入是正确的......

【问题讨论】:

请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到 red box 了吗?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你不能决定哪一个,this article 会帮助你。如果你选择 PDO,here is good tutorial. 【参考方案1】:

这些天,我不擅长约会。感谢以下工作,我可以按我想要的格式打印日期。

$year = $_POST['year'];
$month = $_POST['month'];
$day = $_POST['day'];
$scr = strtotime($year . '-' . $month . '-' . $day);
$gelis_tarihi = date('Y-m-d', $scr);

$yil = $_POST['yil'];
$ay = $_POST['ay'];
$gun = $_POST['gun'];
$birlestir = strtotime($yil . '-' . $ay . '-' . $gun);
$gelis_tarihi = date('Y-m-d', $birlestir);

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

假设您收到一个圣诞节日期: 2021 年 12 月 25 日 (25 de Diciembre del año 2021),字符串格式:“d-m-Y”,例如“12-25-2021”。首先根据接收到的格式创建一个有效的DateTime对象:

var_dump(DateTime::createFromFormat("d-m-Y","25-12-2021", new DateTimeZone("America/Argentina/Buenos_Aires")));

这会生成为输出:

object(DateTime)#2 (3) 
  ["date"]=>
  string(26) "2021-12-25 10:21:11.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(30) "America/Argentina/Buenos_Aires"

现在可以使用 format("Y-m-d H:i:s")) 从 DateTime 对象中获取日期字段

var_dump(DateTime::createFromFormat("d-m-Y","25-12-2021",new DateTimeZone("America/Argentina/Buenos_Aires"))->format("Y-m-d H:i:s"));

这会生成一个准备插入值作为输出:

string(19) "2021-12-25 10:56:30"

总而言之,现在您可以像这样在 MySQL 中插入格式化日期('DD-MM-YYYY'):

<?php
//string input post like "25-12-2021"
$date_input = $_POST['date_input']; 
//create DateTime object
$date_time_obj=DateTime::createFromFormat("d-m-Y","25-12-2021",new DateTimeZone("America/Argentina/Buenos_Aires"));
//format date ready to insert as string at MySQL
$str_date=$date_time_obj->format("Y-m-d H:i:s");
?>

现在直接从 PHP 运行到 MySQL 作为查询:

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

//verify connection
if (mysqli_connect_errno()) 
    printf("Error de conexión: %s\n", mysqli_connect_error());
    exit();

//prepare the query to execute
$stmt = $mysqli->prepare("INSERT INTO table_example (DATE_FIELD) VALUES (?)");
//prevent sql injection
$stmt->bind_param('s', $str_date);
//execute prepared statements
$stmt->execute ();
?>

【讨论】:

你为什么用DateTime::createFromFormat("dmY", str_replace("-","","25-12-2021"), new DateTimeZone("America/Argentina/Buenos_Aires"))而不是DateTime::createFromFormat("d-m-Y", "25-12-2021", new DateTimeZone("America/Argentina/Buenos_Aires")) "INSERT INTO table_example (DATE_FIELD) VALUES ('$str_date')" 对 SQL 注入开放。改用参数绑定。 @shaedrich 感谢我编辑答案的建议。问候【参考方案3】:

HTML:

<div class="form-group">
  <label for="pt_date" class="col-2 col-form-label">Date</label>
  <input class="form-control" type="date" value=<?php echo  date("Y-m-d") ;?> id="pt_date" name="pt_date">
</div>

SQL

$pt_date = $_POST['pt_date'];

$sql = "INSERT INTO `table` ( `pt_date`) VALUES ( '$pt_date')";

【讨论】:

id="pt_date" name="pt_date"> 请在您的答案中添加一些解释,以便其他人可以从中学习。此外,请将所有信息放在您的答案中,不要使用评论部分包含更多信息 研究人员不应使用此查询——它不安全/不稳定。【参考方案4】:

首先存储$date=$_POST['your date field name'];

insert into **Your_Table Name** values('$date',**other fields**);

您必须在单引号 (' ') 中包含日期

希望对你有帮助。

【讨论】:

【参考方案5】:

如Date and Time Literals中所述:

MySQL 可识别以下格式的 DATE 值:

作为'YYYY-MM-DD''YY-MM-DD' 格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31''2012/12/31''2012^12^31''2012@12@31' 是等价的。

作为'YYYYMMDD''YYMMDD' 格式的不带分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523''070523' 被解释为'2007-05-23',但'071332' 是非法的(它有无意义的月份和日期部分)并变成'0000-00-00'

作为YYYYMMDDYYMMDD 格式的数字,前提是该数字作为日期有意义。例如,19830905830905 被解释为'1983-09-05'

因此,字符串 '08/25/2012' 不是有效的 MySQL 日期文字。您有四个选项(按照某种模糊的偏好顺序,没有任何关于您的要求的更多信息):

    配置 Datepicker 以使用 altField 及其 altFormat option 以支持的格式提供日期:

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker(
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    );
    

    或者,如果您希望用户看到 YYYY-MM-DD 格式的日期,只需设置 dateFormat option:

    $( "selector" ).datepicker(
        dateFormat: "yyyy-mm-dd"
    );
    

    使用MySQL的STR_TO_DATE()函数转换字符串:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    

    将从 jQuery 接收的字符串转换为 PHP 理解为日期的内容,例如 DateTime 对象:

    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    然后:

    获取合适的格式化字符串:

    $date = $dt->format('Y-m-d');
    

    获取 UNIX 时间戳:

    $timestamp = $dt->getTimestamp();
    

    然后直接传递给 MySQL 的 FROM_UNIXTIME() 函数:

    INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
    

    手动将字符串操作为有效的文字:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

警告

    您的代码容易受到 SQL 注入的攻击。您真的应该使用prepared statements,您将变量作为不被评估的参数传递到其中对于 SQL。如果你不知道我在说什么,或者如何解决它,请阅读Bobby Tables 的故事。

    另外,如the introduction 中关于mysql_* 函数的PHP 手册章节所述:

    此扩展自 PHP 5.5.0 起已弃用,不推荐用于编写新代码,因为它将来将被删除。相反,应该使用 mysqli 或 PDO_MySQL 扩展名。在选择 MySQL API 时,另请参阅 MySQL API Overview 以获得更多帮助。

    您似乎正在使用DATETIMETIMESTAMP 列来保存日期值;我建议您考虑改用 MySQL 的 DATE 类型。如The DATE, DATETIME, and TIMESTAMP Types 中所述:

    DATE 类型用于具有日期部分但没有时间部分的值。 MySQL 以'YYYY-MM-DD' 格式检索和显示 DATE 值。支持的范围是 '1000-01-01''9999-12-31'

    DATETIME 类型用于同时包含日期和时间部分的值。 MySQL 以'YYYY-MM-DD HH:MM:SS' 格式检索并显示DATETIME 值。支持的范围是'1000-01-01 00:00:00''9999-12-31 23:59:59'

    TIMESTAMP 数据类型用于同时包含日期和时间部分的值。 TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。

【讨论】:

【参考方案6】:

使用 jquery 日期选择器获取日期对象

var myDate = $('element').datepicker('getDate')

对于 mysql,日期需要采用正确的格式。处理任何时区问题的一种选择是使用 moment.js

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

【讨论】:

【参考方案7】:
$date_field         = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());

【讨论】:

谢谢,你给我提示date('Y-m-d',strtotime($_POST['date_field'])); 是有效的,这正是我想要的。 有没有办法把它推得更高?它非常简单并且有效。接受的答案是彻底的,但似乎没有这个选项。【参考方案8】:

最简单的方法是

$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];

$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());

【讨论】:

【参考方案9】:

试试这样的..

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);

【讨论】:

【参考方案10】:

您必须确保 jQuery 输出中的日期格式为 YYYY-MM-DD。我可以看到 jQuery 返回 MM-DD-YYYY,这不是有效的 MySQL date format,这就是它返回错误的原因。

要将其转换为正确的,您可以这样做:

$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

然后您将获得有效 MySQL 格式的格式化日期,即 YYYY-MM-DD,即 2012-08-25

我还建议您在将数据插入数据库时​​使用mysql_real_escape_string,以防止将SQL injections 作为快速解决方案,或者更好地使用PDO 或MySQLi。

您使用mysql_real_escape_string 的插入查询应该如下所示:

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );

【讨论】:

【参考方案11】:

您应该考虑从该日期创建一个时间戳,witk mktime()

例如:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );

【讨论】:

以上是关于关于日期选择器的格式问题,value-format的主要内容,如果未能解决你的问题,请参考以下文章

Element Ui 日期选择器 范围限制 + value-format

如何更改日期范围选择器的日期格式?

如何更改html5中自动日期选择器的显示格式

如何更改角度 ui-bootstrap 日期选择器的格式

element-ui 时间日期选择器格式化后台需要的格式

MVC 的日期选择器的 dd-mm-yyyy 格式在 Chrome 中不起作用