日期函数( )返回1970年1月1日。

3

我正在使用 jQuery 的日期选择器,格式是 mm/dd/yyyy,但我需要将其格式化为 yyyy-mm-dd 以适应 SQL 数据库,因此我正在使用以下代码。

   $date  = date("Y-m-d",strtotime($startdate));

以下是相关内容:

 $query = "INSERT INTO complete_table ( name, startdate) VALUES ('$_POST[name]', '$date')";

很不幸,无论输入什么,我都会在数据库中注册1970年1月1日。有任何想法我做错了什么吗?非常感谢您的帮助。

1
尝试回显strtotime函数的输出,如果返回0,则表示出现错误。该日期是UNIX时间戳的开始。 - jeroenvisser101
请注意,当前的查询存在 SQL 注入漏洞。如果您想了解更多信息,请访问 https://dev59.com/oHVD5IYBdhLWcg3wL4cA。 - jeroenvisser101
4个回答

4
当你从date()函数得到1970-01-01时,这意味着时间戳不正确。那个日期是UNIX纪元

当涉及到JavaScript(在本例中是一个日期选择器)时,您应该始终确保您得到的实际上是您期望的结果。简单地通过strtotime()函数传递它将会导致像你这里遇到的问题。

处理日期的一个好方法是使用datetime扩展。它有一个静态方法DateTime::createFromFormat,可以让您使用任何格式解析任何日期:

// The value from the datepicker
$dpValue = '12/30/2013';

// Parse a date using a user-defined format
$date = DateTime::createFromFormat('d/m/Y', $dpValue);

// If the above returns false then the date
// is not formatted correctly
if ($date === false) {
    header('HTTP/1.0 400 Bad Request');
    die('Invalid date from datepicker!')
}

// Using the parsed date we can create a
// new one with a formatting of out choosing
$forSQL = $date->format('Y-m-d');

// ...

1
在初始化datepicker时,可以像这样将日期格式放入jquery中。
$( "#id/.class" ).datepicker({dateFormat: 'yy-mm-dd'}); 

如果在客户端完成操作,此格式将插入到 MySQL 数据库中,否则在服务器端代码上进行格式化。


-1

$startdate 无效,因此 strtotime 函数返回小于 86400(很可能是 0)的任何内容,而 86400 是一天内的秒数。 请参考 PHP 文档以获取正确格式的 $startdate 此处


-3

这被称为纪元。因此,startdate 是零。


"$startdate" 不一定要为零,但 strtotime 函数的结果必须为零或小于 86400。 - jeroenvisser101
@jeroenvisser101 - 有人认为问题是startdate的值等于零。 - Ed Heal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接