### Summary

When using the user module to modify password_expire_min=0, the processing result does not meet expectations .
I guess the problem is caused by the following code in the user module.
```
    # deal with password expire min
    if user.password_expire_min:
        if user.user_exists():
            (rc, out, err) = user.set_password_expire_min()
```
Modifying to the following  code may fix this problem.
```
    # deal with password expire min
    if user.password_expire_min is not None:
        if user.user_exists():
            (rc, out, err) = user.set_password_expire_min()
```

### Issue Type

Bug Report

### Component Name

user

### Ansible Version

```console
$ ansible --version
ansible [core 2.11.1] 
  config file = None
  configured module search path = ['/home/betadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /app/python3/lib/python3.8/site-packages/ansible
  ansible collection location = /home/betadmin/.ansible/collections:/usr/share/ansible/collections
  executable location = /app/python3/bin/ansible
  python version = 3.8.5 (default, Sep 18 2020, 14:55:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
  jinja version = 2.11.2
  libyaml = False
```


### Configuration

```console
$ ansible-config dump --only-changed
```


### OS / Environment

RHEL 7.4

### Steps to Reproduce

- name: Edit password_expire_min
  user:
    name: test
    password_expire_min: 0



### Expected Results

Minimum number of days between password change	: 0


### Actual Results


Minimum number of days between password change	: 2


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
- Implementation differs by platform. This option does not always mean the user cannot login using other methods.
            - This option does not disable the user, only lock the password.
            - This must be set to C(False) in order to unlock a currently locked password. The absence of this parameter will not unlock a password.
            - Currently supported on Linux, FreeBSD, DragonFlyBSD, NetBSD, OpenBSD.
        type: bool
        version_added: "2.6"
    local:
        description:
            - Forces the use of "local" command alternatives on platforms that implement it.
            - This is useful in environments that use centralized authentication when you want to manipulate the local users
              (in other words, it uses C(luseradd) instead of C(useradd)).
            - This will check C(/etc/passwd) for an existing account before invoking commands. If the local account database
              exists somewhere other than C(/etc/passwd), this setting will not work properly.
            - This requires that the above commands as well as C(/etc/passwd) must exist on the target host, otherwise it will be a fatal error.
        type: bool
        default: no
        version_added: "2.4"
    profile:
        description:
            - Sets the profile of the user.
            - Does nothing when used with other platforms.
            - Can set multiple profiles using comma separation.
            - To delete all the profiles, use C(profile='').
            - Currently supported on Illumos/Solaris.
        type: str
        version_added: "2.8"
    authorization:
        description:
            - Sets the authorization of the user.
            - Does nothing when used with other platforms.