当前位置: 首页 > 知识库问答 >
问题:

PHP日期,如何防止PHP日期自动转换为次日?[副本]

冷正信
2023-03-14

您可能知道,php date将在以下日期返回有效日期:

year-04-31

year-06-31

year-09-31

我在这里读过其他关于不存在日期的SO线程,但是这个线程并没有解决我的问题。我的目标是防止php自动将这些日期转换为第二天。例如,如果用户输入日期2018-04-31,系统将提示错误。

$value = '2018-06-31'; // assume user input this date
if(date is 04-31, 06-31 or 09-31) // i have no idea what to put here
  echo 'wrong date, please enter again';

编辑

有人真的把这个问题作为SO中这个线程的重复发布了...哪一部分说4-31, 6-31, 9-31?请不要简单地将此标记为重复,请将我的问题与标记之前的其他问题进行比较。谢谢你

共有3个答案

孙元明
2023-03-14

我猜您不允许用户在每月30天时输入31。既然如此,为什么不简单地使用日期选择器呢?不允许用户输入日期,而是让他们选择一个。如果您害怕在选择日期后进行编辑,则使用javascript函数禁用字段中的文本输入,只允许单击以显示日期选择器。

毋炳
2023-03-14

strtotime将返回FALSE,以防无法将字符串转换为时间戳。所以你可以试试:

if (strtotime('<your date time string here>') === false) {
   // TODO.
}

-----编辑------感谢@Nick。

strotime在某些情况下可能错误为“02-30”。因此,我建议另一种解决方案

$date = explode('-', '<date time string>');
if (checkdate($date[1], $date[2], $date[0]) {
    // TODO
}
微生城
2023-03-14

试试下面的方法

<?php

$date = '2018-06-31';


function checkIsAValidDate($date){
    return (bool)strtotime($date) && date("Y-m-d", strtotime($date)) == $date;
}

if(checkIsAValidDate($date) == 1){
    echo 'valid';   
}else{
    echo 'not valid';
}

?>

这将验证格式,并且日期是真实的。也就是说,六月只有30天。

 类似资料:
  • 问题内容: 我有一个输出数据数组的PHP脚本。然后将其转换为使用函数。 我的问题是我的数组中有一个日期,但日期格式不正确。 我怎样才能在PHP中转换它呢? 代替上面的日期,我需要等效的JavaScript函数 新的Date() 当我输出上述内容时,我得到以下内容:“ Fri Jun 01 2012 11:08:48 GMT + 0100(GMT Daylight Time)”但是,如果我将PHP日

  • 周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢

  • 问题内容: 我有一个等于日期的字符串,表示为自Unix纪元以来的毫秒数。 我正在尝试将其输出到dmY。 我得到的字符串是“ 1227643821310”,并被告知结果应等于 2-12-2008 ,但我不断得到的结果是 25-11-2008 我的代码如下: 关于为什么会这样的任何想法? 问题答案: 您已经做对了,1227643821根本不是2008年12月12日,的确是2008年11月25日。

  • 如何转换来自JavaScript的日期格式: 这些格式不起作用 日期要追溯到1969年 有什么见解吗?

  • 主要内容:PHP date() 函数,PHP Date() - 格式化日期,完整的 PHP Date 参考手册PHP date() 函数用于格式化时间/日期。 PHP date() 函数 PHP date() 函数可把时间戳格式化为可读性更好的日期和时间。 时间戳是一个字符序列,表示一定的事件发生的日期/时间。 语法 参数 描述 format 必需。规定时间戳的格式。 timestamp 可选。规定时间戳。默认是当前的日期和时间。 PHP Date() - 格式化日期 date() 函数的第一个

  • 问题内容: 我在使用此代码的php中有一个日期字段: 我如何将其转换为MySql格式的Registry,以便包含在db中。它是否遵循以下格式:date(’Ymd’strtotime($ date);.我问的原因是因为我尝试了此方法的变体,但似乎无法正常工作。显示为1970还是其他变体对此非常感谢 问题答案: 1.如果您的MySQL列为: 2.如果您的MySQL列为: 您无需工作,因为它不适用于破折