Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何仅存储月份和年份,并将所有日期的默认日期设置为1?_Php_Mysql_Sql_Date - Fatal编程技术网

Php 如何仅存储月份和年份,并将所有日期的默认日期设置为1?

Php 如何仅存储月份和年份,并将所有日期的默认日期设置为1?,php,mysql,sql,date,Php,Mysql,Sql,Date,我的日期是2010-12-24 我需要将日期存储为数据库表中的2010-12-01。这应适用于所有日期 插入另一个日期2010-12-25时,它也应存储为2010-12-01,对于2017-01-29,它应存储为2017-01-01 如何将日期设置为默认值1 我希望这是清楚的。感谢您的帮助。谢谢 <?php $date='2017-01-12'; $date=explode('-',$date); $date[2]=str_replace($date[2],'01',$date[2])

我的日期是
2010-12-24

我需要将日期存储为数据库表中的
2010-12-01
。这应适用于所有日期

插入另一个日期
2010-12-25
时,它也应存储为
2010-12-01
,对于
2017-01-29
,它应存储为
2017-01-01

如何将日期设置为默认值1

我希望这是清楚的。感谢您的帮助。谢谢

<?php

$date='2017-01-12';

$date=explode('-',$date);
$date[2]=str_replace($date[2],'01',$date[2]);
$date=implode('-',$date);
print_r($date);
因此,它总是将一天替换为
01

在执行新日期的insert查询后,因为新日期已在php中修改。

一种更简单的方法是使用php的内置日期函数:

// here's your date
$date='2017-01-12';
// and here we transform it as we want
$date_first = date('Y-m-01', strtotime($date));
// check out the result :)
echo $date_first;

不过,它可以在mysql中很好地完成

set @date = '2017-12-25';
select str_to_date(CONCAT(YEAR(@date),' ',MONTH(@date),' 1'), '%Y %m %d');

您不需要使用@date变量,只需将@date替换为需要插入的日期,并使用str_to_date将日期替换为1。

您可以直接在MySql中实现它,如下所示:

SELECT DATE_SUB('2010-12-25', INTERVAL DAY('2010-12-25')-1 DAY)
说明:

1. DAY('2010-12-25')-1 DAY // will return 24
2. DATE_SUB('2010-12-25', INTERVAL 24) // will return 25-24 = 01 i.e. 2010-12-01

这在任何情况下都有效。

这应该有效,根据您的要求进行调整

$today = date("Y-m", strtotime("2017-12-25"));
  $dbDate =  date ("Y-m-d", strtotime($today."-1"));
  echo $dbDate;

将$dbDate传递给查询。

只需在应用程序层中使用字符串函数查找月份的第一个日期。如果我是你,我会在代码中执行此操作,我希望将责任分开,数据库用于存储!我认为代码和数据库中的业务逻辑很难维护!我也在控制器课上做这件事。。不过谢谢你的建议……)谢谢你的回答。很好的回答:-)爆炸,内爆+str_替换,只为一个简单的用例。根据被问到的内容回答了OP的问题。我的意思是我的解决方案非常简单。只是注释你的答案,因为你的代码不容易快速理解。如果日期是另一种格式呢?您得到的输出在所有部分之间具有
-
。此外,如果询问者在其应用程序的高级别上使用此功能,可能会导致性能下降。最好的答案是最简单、最可靠的:)如果已经有了date()函数,就不需要使用strings函数
$today = date("Y-m", strtotime("2017-12-25"));
  $dbDate =  date ("Y-m-d", strtotime($today."-1"));
  echo $dbDate;